firefox 30上的window.onload

时间:2014-06-23 06:24:46

标签: firefox-addon onload firefox-addon-sdk addeventlistener

我需要一些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功能部分似乎无法正常工作(即使我发出警报(' 1&#39) ;)内部),而窗口仍然打开。关于如何解决它的任何想法?

UPD。 也尝试了这个

smsWin.addEventListener("load", function() {
  smsWin.document.getElementById('textsms').value = text;
}, false);

它也不适用于插件(但适用于ScratchPad和FF29)。将load更改为DOMContentLoaded无需任何内容

2 个答案:

答案 0 :(得分:1)

它从暂存器起作用的原因是因为你在"环境"模式下运行代码window.open("http://mysite.net/", "New window", "height=250");。 > "内容"

如果你设置"环境"到"浏览器"在暂存器中,你会发现它不会起作用。

您无法通过插件代码执行window.open。如果您想打开一个窗口,则必须使用Services.wwhttps://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并告诉我它是如何运作的。

答案 1 :(得分:1)

好的,我已经做了一些解决方法。好像window.onload部分在FF30中无法正常更新。但如果窗口是iframe,它就能完美运行。所以我只是使用var smsWin = document.createElement('iframe');修改了所需的页面,依此类推,突然smsWin.onload = function () {...}完全正常。