我正在开发Firefox扩展程序。在网页的客户端,我添加了一个链接,在点击链接时,我打算打开一个窗口,允许用户输入文本。当我点击链接时,它会打开窗口,但它不允许我写入它。
e.g。
ww.document.write('<div id = "textDiv">') ;
在这里它给了我一个错误:
Error: uncaught exception: [Exception... "Security error" code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)" location: "chrome://googbar/content/googbar.js Line: 272"]
我使用以下内容打开窗口:
var ww = Components.classes[
"@mozilla.org/embedcomp/window-watcher;1"].getService(Components.interfaces.nsIWindowWatcher);
var wm =Components.classes["@mozilla.org/appshell/window-mediator;1"]
calWindow = ww.openWindow(null,'calendarWindow',null, 'left =500, top = 190, width = 230, height = 220,titlebar = no', null);
打开的窗口不是空窗口,它包含父窗口的内容。例如,我从维基百科打开这个窗口,打开的新窗口包含维基页面。
答案 0 :(得分:0)
我并不完全清楚造成这种情况的原因,但MDC上的这些two pages表明,这可能会受到Firefox 3.0变化的影响,以收紧一些安全问题。
虽然不是一个完整的答案,但这可能会让您走上解决问题的正确轨道。如果没有,请告诉我们您正在尝试做的更多细节。
答案 1 :(得分:0)
1)nsIWindowWatcher.openWindow的第二个参数是URL。 'calendarWindow'不是。 google result from mozillazine表示传递''神奇地使document.write工作,我没有检查。
2)我会尝试设置document.body.innerHTML
而不是document.write()
。我认为document.write()
是一个糟糕的API,只能继续存在才能兼容。
3)无论如何,在你的情况下,我不明白为什么你需要打开一个完整的浏览器窗口只是为了放一些简单的HTML。创建一个XUL对话框,将其放在您的扩展中并打开它(使用window.open('chrome://....', '', 'chrome')
)。它的打开速度也快得多。