我正在编写一个Firefox插件,允许通过向页面添加div / iframe元素来注释网页。我的插件代码能够放置div或iframe,但它无法设置iframe的源或div的innerHTML。是否有一些安全限制阻止我设置div的innerHTML或iframe的src?这是我的插件里面的代码。
onPageLoad: function(aEvent) {
var doc = aEvent.originalTarget;
var q = "";
q = getRequestParameter(doc.location.search,"q");
if(debug) Firebug.Console.log("query string =" + q);
if(q!="" && q!=undefined) {
//To Check for target type
//Firebug.Console.log(aEvent.originalTarget.nodeName);
var n = document.createElement("div");
n.style.position = "fixed";
n.style.padding ="10px";
n.style.backgroundColor ="gray";
n.style.bottom="0";
n.style.zIndex = "99" ;
n.style.width ="250px";
n.style.height="320px";
n.style.right="10px";
n.style.overflow="visible";
//gBrowser.contentDocument.body.appendChild(n);
var i = document.createElement("iframe");
i.style.height="300px";
i.style.width="230px";
i.style.zindex="999";
i.id = "rowzSearchIFrame";
i.src="http://annotator.com?webpagequery="+q;
i.name ="rowzSearchIFrame";
n.appendChild(i);
gBrowser.contentDocument.body.appendChild(n);
//content.document.body.appendChild(n);
document.frames['rowzSearchIFrame'].location.href = 'http://annotator.com?webpagequery='+q;
alert(document.frames['rowzSearchIFrame'].id);
document.frames['rowzSearchIFrame'].location.href = 'http://annotator.com?webpagequery='+q;
document.getElementById('rowzSearchIFrame').setAttribute('src','http://annotator.com?webpagequery='+q);
content.document.getElementById('rowzSearchIFrame').setAttribute('src','http://annotator.com?webpagequery='+q);
document.getElementById('rowzSearchIFrame').src = 'http://annotator.com?webpagequery='+q;
content.document.getElementById('rowzSearchIFrame').src = 'http://annotator.com?webpagequery='+q;
}
我的代码可以使用所有正确的CSS放置div和iframe,但它无法设置iframe的src或iframe的innerHTML。
正如您所看到的,我已经尝试了所有可能的设置iframe src的机制。该脚本无法执行此操作。请帮忙!
答案 0 :(得分:2)
你的onPageLoad必须在覆盖的某个地方,否则你将无法使用gBrowser。如果是这样的话,你的document.createElement将不起作用,因为那是chrome窗口。
它可能适用于doc.createElement或gBrowser.contentDocument.createElement。我没有尝试,但从我可以看到你试图在一个文档上创建元素并将其附加到另一个文档。
添加编辑以完成此答案。根据此答案对代码所做的更改如下(请与发布的代码进行比较以查看差异)
onPageLoad: function(aEvent) {
var doc = aEvent.originalTarget;
var q = "";
q = getRequestParameter(doc.location.search,"q");
if(debug) Firebug.Console.log("query string =" + q);
if(q!="" && q!=undefined) {
//To Check for target type
//Firebug.Console.log(aEvent.originalTarget.nodeName);
var n = doc.createElement("div");
n.style.position = "fixed";
n.style.padding ="10px";
n.style.backgroundColor ="gray";
n.style.bottom="0";
n.style.zIndex = "99" ;
n.style.width ="250px";
n.style.height="320px";
n.style.right="10px";
n.style.overflow="visible";
doc.body.appendChild(n);
var i = document.createElement("iframe");
i.style.height="300px";
i.style.width="230px";
i.style.zindex="999";
i.id = "rowzSearchIFrame";
i.src="http://annotator.com?webpagequery="+q;
i.name ="rowzSearchIFrame";
n.appendChild(i);
gBrowser.contentDocument.body.appendChild(n);
//content.document.body.appendChild(n);
document.frames['rowzSearchIFrame'].location.href = 'http://annotator.com?webpagequery='+q;
alert(document.frames['rowzSearchIFrame'].id);
document.frames['rowzSearchIFrame'].location.href = 'http://annotator.com?webpagequery='+q;
document.getElementById('rowzSearchIFrame').setAttribute('src','http://annotator.com?webpagequery='+q);
content.document.getElementById('rowzSearchIFrame').setAttribute('src','http://annotator.com?webpagequery='+q);
document.getElementById('rowzSearchIFrame').src = 'http://annotator.com?webpagequery='+q;
content.document.getElementById('rowzSearchIFrame').src = 'http://annotator.com?webpagequery='+q;
}