Сценарий внедрения Firefox WebExtensions в iframe - PullRequest
0 голосов
/ 07 ноября 2019

Я новичок в JavaScript и написании веб-расширений. Я хочу написать веб-расширение, которое меняет цвет записей в расписании моего университетского планировщика. После некоторой стартовой борьбы я наконец-то смог написать Firefox WebExtension, который делает именно это на платформе моего универа. Проблема в том, что мой универ использует несколько платформ для разных задач, к которым можно получить доступ напрямую или через платформу, которая соединяет их все. Я смог только успешно изменить цвета на платформе, которая прямо показывает мне мое расписание, а не на «общей» платформе. После еще одного исследования я нашел проблему. Планировщик загружается в iframe, и поскольку обе платформы имеют разные домены, это кажется более серьезной проблемой, чем я думал. Я прочитал много запутанной информации о том, как работать с этими междоменными фреймами, которую я не мог по-настоящему понять или просто не могу выполнить.

Насколько я знаю, я мог бы просто ввести свойСценарий непосредственно в iframe и получить желаемый результат. Но я не смог этого сделать. Я не нашел никакой полезной информации о том, как сделать это с WebExtension. Я был бы очень признателен, если бы кто-нибудь мог помочь мне понять это.

Возможно, моя идея совершенно неверна, и мне нужно попробовать что-то еще, например, использовать почтовое сообщение (которое я не понимал, как реализовать) или что-то совершенно другое. Так или иначе, я с нетерпением жду ваших ответов.

Ответы [ 3 ]

0 голосов
/ 07 ноября 2019

Насколько я знаю, я должен иметь возможность просто вставить свой скрипт непосредственно в iframe и получить желаемый результат. Но я не смог этого сделать.

iframe похож на веб-страницу, и вы можете вставлять в нее скрипты, как на любой веб-странице.

Существуют следующие соображения:

  • Расширение должно корректировать Permission для iframe (который может быть из другого домена)
  • Настройка all_frames: true (по умолчанию false) in content_scripts

Если вы вводите сценарий другим методом, кроме manifest.json, дайте мне знать, и я объясню это тоже.

0 голосов
/ 08 ноября 2019

Решение

Благодаря комментарию erosman я снова посмотрел на manifest.json и немного поиграл, чтобы наконец-то заставить свой сценарий работать так, как нужноЯ хотел. Моя проблема была в неправильных шаблонах URL, которые я предоставил. Для тех, кто сталкивается с подобной проблемой, как я, я предоставлю то, что спасло бы мое прошлое много времени.

Как erosman говорит:

iframeэто как веб-страница, и вы можете вставлять в нее скрипты, как и любую веб-страницу.

Так как мне не нужен доступ к содержимому iframe из родительского документа, это означает, что я действительно могу просто вставить свойСценарий непосредственно в iframe и пусть он там работает. Результат будет виден на веб-странице, содержащей iframe. С точки зрения Firefox WebExtensions это просто означает установку правильных параметров в вашем manifest.json. В content_scripts установите "all_frames": true, чтобы позволить вашему скрипту вставляться в фреймы. Теперь необходимо указать URL-адрес веб-страницы, на котором отображается iframe, а также URL-адрес iframe. Ваш content_scripts должен выглядеть так:

    "content_scripts": [
        {
         "matches": ["*://*.webpage.org/*", "*://*.iframe.com/*"],
         "all_frames": true,
         "js": ["script.js"]
        }
     ]
0 голосов
/ 07 ноября 2019

Мне очень жаль, но невозможно изменить один веб-сайт в iframe, если этот iframe содержит веб-сайт из другого домена.

Возможно, вы основали несколько примеров с помощью java-скрипта, но если вы глубоко посмотрите на эти примеры, вы обнаружите, что они работают, потому что домен всегда один и тот же ...

Разное происхождениезапретить эти действия.

...