Chrome - eval () в контексте iframe из WebExtension - PullRequest
0 голосов
/ 10 апреля 2019

Я работаю над WebExtension, которое очищает некоторые данные с веб-страницы. Страница, о которой идет речь, динамически загружает содержимое в iframe, а iframe содержит то, что мне нужно. Данные, которые мне нужны, никогда не записываются в документ iframe, они существуют только в объектах JS.

Внутри моего WebExtension я пытаюсь сделать следующее:

var result = $("iframe")[0].contentWindow.eval("(function() { return $('#grid').jqxGrid('getrows'); }())");

Это работает безупречно при использовании расширения в Firefox. Никаких проблем.

К сожалению, попытка сделать то же самое в Chrome приводит к ошибке $ is not defined на eval.

Последние пару часов я пытался понять, почему, и я в полной растерянности. Буду очень признателен, если кто-нибудь укажет мне правильное направление.

1 Ответ

0 голосов
/ 10 апреля 2019

Я все еще не уверен, почему eval() работает в Firefox, но не в Chrome, но вот что я в итоге сделал, чтобы получить то, что мне нужно:

1) Добавить прослушиватель событий в моем расширениидля пользовательского события.

window.addEventListener("myCustomEvent", function(e) { HandleResult(e.detail); });

2) Вставить блок сценария с кодом для запуска события, включая необходимые мне данные, в тело документа iframe.

$("body", $("iframe").contents()).append("<script>top.dispatchEvent(new CustomEvent('myCustomEvent', {detail: $('#grid').jqxGrid('getrows') }));</script>")

Привет wOxxOm за то, что мой мозг направлен в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...