2016-10-06 3 views
1

Я пытаюсь взаимодействовать с iframe, расположенным в всплывающем окне chrome. Я знаю, что content.js можно вводить во весь фрейм с помощью manifest.json, но он работает с фреймом внутри веб-страницы, а не внутри всплывающего окна расширения.content.js в iframe из chrome-extension popup

Это выполнимо? Я много пробовал, но пока не нашел решения.

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

{ 
"name" :"test", 
"version": "1.0", 
"manifest_version": 2, 
"description" :"Scraping Facebook", 
"permissions": [ 
    "cookies", 
    "background", 
    "tabs", 
    "http://*/*", 
    "https://*/*", 
    "storage", 
    "unlimitedStorage" 
], 
"icons": { "128": "images/pint.png" }, 
"content_scripts": [ 
    { 
    "matches": [ 
     "http://*/*", 
     "https://*/*" 
    ], 
    "js": ["jquery-3.1.0.min.js","content.js"], 
    "run_at":"document_end" 
    } 
], 
"web_accessible_resources": [ 
    "http://*/*", 
    "https://*/*", 
    "styles/*", 
    "fonts/*" 
], 
"background": { 
    "scripts": ["background.js"] 
    }, 
"browser_action" : 
    { 
     "default_popup": "popup.html", 
     "default_title": "test" 
    } 
} 
+0

привет, я добавил свой manifest.json – hadesMM

+0

Вы пытаетесь внедрить сценарий контента в iframe внутри всплывающего окна для вашего собственного расширения или другого расширения? Это подразумевается, что оно является вашим собственным существованием * popup.html * в вашем 'browser_action', но не указано явно. – Makyen

+0

Пожалуйста, отредактируйте эту тему: включите ** полный ** [mcve], дублирующий проблему. Обычно включают * manifest.json *, некоторые из фоновых, контентных и всплывающих скриптов и HTML. Вопросы, требующие помощи по отладке («** почему этот код не работает? **)) должны включать: ► желаемое поведение, ► конкретную проблему или ошибку * и * самый короткий код, необходимый для его воспроизведения ** в вопросе сам**. Вопросы без четкого описания проблемы не полезны другим читателям. Смотрите: «** Как создать [mcve] **», [о каких темах я могу спросить здесь?] (Http://stackoverflow.com/help/on-topic) и [ask]. – Makyen

ответ

4

Использование "all_frames": true в вашем объявлении сценария контента, чтобы послать его в IFRAME внутри всплывающего окна:

"content_scripts": [{ 
    "matches": [ "http://example.com/*" ], 
    "js": [ "content.js" ], 
    "all_frames": true 
}], 

Затем вы можете использовать messaging: содержание сценария инициирует он, и всплывающий скрипт регистрирует слушателя.

  • Trivial разовый SendMessage:

    content.js:

    chrome.runtime.sendMessage('test', function(response) { 
        console.log(response); 
    ); 
    

    popup.js:

    chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) { 
        console.log('popup got', msg, 'from', sender); 
        sendResponse('response'); 
    }); 
    
  • Долгоживущее порт:

    содержание .js:

    var port = chrome.runtime.connect({name: 'test'}); 
    port.onMessage.addListener(function(msg, port) { 
        console.log(msg); 
    }); 
    port.postMessage('from-iframe'); 
    

    popup.js:

    var iframePort; // in case you want to alter its behavior later in another function 
    
    chrome.runtime.onConnect.addListener(function(port) { 
        iframePort = port; 
        port.onMessage.addListener(function(msg, port) { 
         console.log(msg); 
        }); 
        port.postMessage('from-popup'); 
    }); 
    

И popup.html:

<html> 
    <head> 
    <script src="popup.js"></script> 
    </head> 
    <body> 
    <iframe width="500" height="500" src="http://example.com"></iframe> 
    </body> 
</html> 
+0

Благодарим за подробный ответ – hadesMM

Смежные вопросы