我正在为Firefox编写一个Web扩展,需要在使用某些URL检索的页面中插入大量附加功能。
由于Mozilla网站上的教程,我能够快速创建一个在打开某个页面时调用的内容脚本,但现在我仍然坚持在页面中插入html片段。
我已经好几个小时了,但无济于事。这是我考虑过并尝试过的:
iframe
无效,因为显然某些安全政策不允许使用指向本地资源的iframe,而最后一条评论here甚至告诉我应该使用panel
而不是iframe
ReferenceError: require is not defined
)innerHTML
将其提供给页面但是我找不到任何用于从资源加载文本的API 答案 0 :(得分:1)
我无法相信我没有注意到这么久,但我终于在我需要的时候完成了所有工作。虽然这样做我甚至提出了另一种方法,所以这里就是。
但首先,这是除了使用iframe
之外我解除所有其他可能方法的主要原因:
最后我发现我唯一缺少的是web_accessible_resources
中的manifest.json
设置。一旦我将用作iframe
的源的html文件添加到该列表中,它就开始工作了。
// manifest.json:
{
"manifest_version": 2,
...
"web_accessible_resources": [
"data/my.html"
],
"content_scripts": [
{
"matches": ["*://*"],
"js": ["js/my.js"]
}
]
}
// js/my.js
var addonFrame = document.createElement ("IFRAME");
addonFrame.style = "position: absolute; bottom: 0; right: 0; width: 150px; height: 38px;";
addonFrame.frameBorder = "0";
addonFrame.src = chrome.extension.getURL ("data/my.html");
document.body.appendChild (addonFrame);
在我第一次使用第一种方法之前,我的实验让我采用了另一种工作方法 - 直接在内容脚本中将HTML插入iframe
。
// js/my.js
var addonFrame = document.createElement ("IFRAME");
addonFrame.style = "position: absolute; bottom: 0; right: 0; width: 150px; height: 38px;";
addonFrame.frameBorder = "0";
var addonHtml = "<!DOCTYPE html>\n\
<html>\n\
<head>\n\
<meta charset='UTF-8'>\n\
<title>Title of the document</title>\n\
</head>\n\
<body>\n\
...\n\
</body>\n\
</html>";
addonFrame.src = 'data:text/html;charset=utf-8,' + encodeURI (addonHtml);
document.body.appendChild (addonFrame);
尽管最后我最终使用了选项A,但让我概述一些优点和缺点:
iframe
元素的小例外)。
所以今后应该更容易支持。#
。Window.postMessage
,以便让我插入原始页面的内容脚本发出ajax请求并给我回复响应(第二部分特别难,因为没有什么比这更好的了那里有jQuery或Prototype)。