我一直在开发一个 chrome 扩展,它从我的服务器获取 html 内容,在页面中创建一个 iframe 并将 html 注入其中。因此,没有“src”属性,因此,我的内容脚本没有被注入。
清单.js:
"background": { "scripts":["background.js"] },
"content_scripts":
[
{"js": ["toolbar.js"], "matches": ["http://*/*"]},
{"js": ["frame.js"], "matches": ["<all_urls>"], "all_frames":true}
],
"web_accessible_resources": [ "loader.gif","frame.js" ],
"permissions": [ "browsingData", "history", "storage", "tabs", "management", "<all_urls>" ]
背景.js:
chrome.extension.onMessage.addListener(function(details)
{
if(details.message.sendBack)
{
chrome.tabs.sendMessage(details.sender.tab.id,details.message.data);
}
});
框架.js:
some function...
if...()
{
chrome.extension.sendMessage({ sendBack: true,data: data });
}
工具栏.js:
function setContent(data)
{
iframe.contentDocument.open('text/html');
iframe.contentDocument.write(data);
iframe.contentDocument.close();
}
现在,iframe 拥有一个工具栏,其中包含与浏览器相关的功能,例如清除历史记录等。用 HTML 来说,有一个锚点,onclick 应该向扩展发送消息,发送“clearHistory”命令。这些功能需要 chrome 扩展访问 chrome.history 和 chrome.management,所以我需要在 html 对象和父扩展之间传递消息。
问题是 iframe 没有注入 frame.js 脚本,即使它的 src 设置为某个本地文件。也许我做错了什么,但我找不到注入脚本的方法。我什至不确定注入脚本会允许这种机制。
我试图获取脚本的相对 url (chrome.tab.getURL) 并且脚本实际上被注入了,但是 console.log(chrome) 没有显示扩展对象或我可以使用的任何方法(我相信这是由于手动注入)
你怎么看?