Доступ к HTML-кросс-источника iframe в скрипте содержимого расширения Chrome через jQuery? - PullRequest
0 голосов
/ 19 декабря 2018

Я работаю над расширением Chrome, которое собирает медийные объявления, размещаемые на веб-сайте для исследования.Я пытаюсь получить доступ к рекламному HTML через jquery следующим образом:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){   
if(request.todo == "CaptureAds"){
    frames = $('iframe')
    for(var iter=0;iter<frames.length;iter++){
        console.log('==================IFRAME====================')
        console.log('A')
        console.log(frames[iter])
        console.log('B')
        console.log(frames[iter].contentDocument)
        console.log('C')
        console.log(frames[iter].src)
    }
}

});

Это дает мне следующий результат:

Перекрестныйисходный iframe, который я могу напечатать, но не могу получить доступ к html:

Два обычных iframe, которые я могу распечатать и получить доступ к их html

Iпосмотрел несколько вопросов о stackoverflow, и они привели к методу postMessage.В моем случае у меня нет прав на редактирование в iframe, поэтому я не могу общаться между двумя iframe, как предлагается в этих решениях.Может кто-нибудь, пожалуйста, предложить способ обойти политику того же происхождения в этом случае, не связываясь с настройками браузера.

Вот мой манифест:

{
"manifest_version": 2,
"name": "xyz",
"version": "1.0",
"description": "abc",
"icons": {
    "16": "images/get_started16.png",
    "32": "images/get_started32.png",
    "48": "images/get_started48.png",
    "128": "images/get_started128.png"
},
"page_action": {
    "default_icon": "images/get_started16.png",
    "default_popup" : "popup.html",
    "default_title": "example"
},
"background": {
    "scripts": ["eventPage.js"],
    "persistent": false
},
"content_scripts": [
    {
        "matches": ["https://www.example.com/*"],
        "js": ["content.js", "jquery-3.3.1.min.js"],
        "all_frames": true
    }
],
"permissions": ["activeTab","https://www.example.com/*","webNavigation"]

}

1 Ответ

0 голосов
/ 19 декабря 2018

Итак - хорошая новость в том, что в вашем коде уже есть "all_frames" : true.Возможно, вы захотите иметь в своем манифесте

"matches": [
        "<all_urls>"
      ],

, если хотите загрузить эту функцию на все веб-страницы.Для того, кто является родителем того, кто участвует, вам придется построить своего рода дерево.

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

window.document.referrer

, и ваш фрейм должен указывать на ваш родительский фрейм.Я не знаю ваших ограничений, но я полагаю, что вы можете выяснить, какой была родительская страница (или, возможно, вы уже знаете?), Поэтому было бы просто сказать: «1012 * Страница A загруженная страница B» в iframe .На этом этапе ваш контент-скрипт находится в обоих из них, так что у вас есть доступ к обоим из них.

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