iFrame中的邮件侦听器由Chrome扩展程序创建

时间:2013-07-30 04:22:26

标签: google-chrome-extension

我创建了一个chrome扩展程序,它使用内容脚本在页面中创建浮动iFrame,这反过来又会加载另一个内容脚本。

Per this answer,这似乎是在实际页面中将我的内容与CSS隔离的最佳方式。

我的iFrame中的内容脚本有一个侦听器(即chrome.extension.onMessage.addListener),用于扩展程序创建的消息。

大部分时间

似乎正在发生的事情是,在我的iFrame完全加载之前,扩展程序正在发送消息,并且侦听器已经进行了更改以进行设置。

一旦原始内容脚本完成,我就会在回调函数中从后台脚本发送消息,但这并不能保证iFrame中的侦听器可用。

如果我在发送消息之前抛出一个任意的延迟(即半秒),它似乎工作,但这是一个相当丑陋的黑客。

有没有更好的方法在iFrame中设置我的监听器?

这是我的代码:

//background script
window.addEventListener("load", chrome.webRequest.onCompleted.addListener(onCompleted, { urls: ['http://acme.com/*'], types: ['main_frame', 'sub_frame']});, false);

function onCompleted(details) {
chrome.tabs.executeScript(details.tabId, {file: "page_content_script.js"}, function() {chrome.tabs.sendMessage(tab_id, {url: details.url});});
}

//page_content_script.js
my_iframe = document.createElement("iframe");
my_div = document.createElement("div");
my_iframe.id = "my_iframe";
my_div.id = "my_div";
//my_div.style = "style div as needed here to make it appear a dialog"
my_iframe.src = chrome.extension.getURL('iframe_content.html');
my_div.appendChild(my_iframe);
document.body.appendChild(my_div)


//iframe content
<!doctype html>
<html>
<head>      
<script src="iframe_content_script.js"></script>
</head>
<body>
some stuff here
</body>

//iframe_content_script.js
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
console.log('message received!');
}

0 个答案:

没有答案