我需要一些有关 Firefox 插件的帮助。我有一个函数可以从页面获取一些值并使用它们来填充新的窗口文本区域。
var ticket = document.getElementsByName('ticket_id');
var addr = document.getElementsByName('address_id');
var text = "Your address is "+addr[0].value+", ticket number is "+ticket+",";
smsWin = window.open("http://mysite.net/", "New window", "height=250");
smsWin.onload = function () {
smsWin.document.getElementById('textsms').innerHTML = text;
};
该函数由 Firefox 中的操作按钮调用
var button1 = require("sdk/ui/button/action").ActionButton({
id: "style-tab1",
label: "Do magic",
icon: "./icon-64.png",
onClick: function() {
require("sdk/tabs").activeTab.attach({
contentScriptFile: self.data.url("close.js")
});
}
});
它在 ScratchPad 和 Firefox 29 的插件中完美运行。但是在最新的 Firefox 30 中,smsWin.onload 函数部分似乎不起作用(即使我将alert('1') 放在里面),而窗口仍然打开。关于如何修复它有什么想法吗?
UPD。 也尝试过这个
smsWin.addEventListener("load", function() {
smsWin.document.getElementById('textsms').value = text;
}, false);
它也不适用于插件(但适用于 ScratchPad 和 FF29)。将 load
更改为 DOMContentLoaded
cnahges 没有任何结果
最佳答案
它从暂存器工作的原因是因为您正在运行代码window.open("http://mysite.net/", "New window", "height=250");
模式为“环境”>“内容”
如果您在便签本中将“环境”设置为“浏览器”,那么您会发现它不起作用。
您无法从插件代码执行 window.open 。如果你想打开一个窗口,你必须使用Services.ww
:https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWindowWatcher
查看如何打开具有以下功能的窗口: http://forums.mozillazine.org/viewtopic.php?f=19&t=428535&p=2321231&hilit=openWindow#p2321231
var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
.getService(Components.interfaces.nsIWindowWatcher)
ww.openWindow(null, "chrome://browser/content/browser.xul", "_blank",
"chrome,all,dialog=no", "http://www.gemme.pl/");
好吧,我看到你正在做 add-sdk 并且窗口打开不是问题,而是窗口加载。尝试使用DOMContentLoaded
。
虽然 sdk 让我很困惑。因为当窗口打开时,窗口上触发的加载是当xul完成加载时。然后您就可以加载页面了。但请尝试使用 DOMContentLoaded
代替 load
,并让我知道它是如何工作的。
关于firefox-addon - Firefox 30 上的 window.onload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24359592/