为什么我的firefox扩展javascript不能访问opener窗口而看不到window.name
我正在编写一个javascript扩展,但遇到了一些无法解决的问题 我的扩展非常简单,它没有向firefox浏览器添加任何GUI元素。它所做的是观察鼠标在firefox浏览器中加载的任何文档中移动,当鼠标停留在文本节点中的“术语”(单词、短语、首字母缩略词)上时,它通过调用以下命令创建并显示一个小的、无边框的弹出窗口,看起来类似于术语上方的工具提示:为什么我的firefox扩展javascript不能访问opener窗口而看不到window.name,javascript,debugging,firefox,firefox-addon,Javascript,Debugging,Firefox,Firefox Addon,我正在编写一个javascript扩展,但遇到了一些无法解决的问题 我的扩展非常简单,它没有向firefox浏览器添加任何GUI元素。它所做的是观察鼠标在firefox浏览器中加载的任何文档中移动,当鼠标停留在文本节点中的“术语”(单词、短语、首字母缩略词)上时,它通过调用以下命令创建并显示一个小的、无边框的弹出窗口,看起来类似于术语上方的工具提示: var cw = window.open("chrome://meanings/content/clarify.html", "clarify",
var cw = window.open("chrome://meanings/content/clarify.html", "clarify", attr);
当我阅读文档时,cw.name
应该是“澄清”(来自第2个参数)。当我用以下内容读回名称时,它确实包含字符串“clearify”:
var cwname = cw.name; // variable cwname does contain "clarify"
但是,运行测试表明,当扩展实例中的代码读取时:
var myname0 = window.name;
var myname1 = window.top.name;
var myname2 = window.document.defaultView.name;
var myname3 = window.document.defaultView.top.name;
。。。这些变量都不包含窗口的名称或任何其他字符串值
我不明白。我还尝试在执行window.open()
后添加以下行:
cw.name = "clarify";
cw.content.name = "clarify";
这不会改变任何事情。可以使用如下代码读取这些属性,并报告刚刚设置的值(到刚刚设置它们的扩展代码):
代码将这些变量打印到错误和浏览器控制台,我就是这样知道的
另一个类似且可能相关的问题。
window.opener
属性也不起作用-该变量始终为null,这显然是错误的,因为这些窗口是由window.open()
创建的
顺便说一句,调用函数移动由window.open()
和cw.moveTo()
创建的窗口可以正常工作,因此这两个窗口之间存在一定程度的连接
有些奇怪的事情发生了,我不明白
有什么想法吗?不幸的是,
窗口。open
方法没有将其第二个参数指定给新窗口的属性-根据,第二个参数仅用作锚定的目标
属性中可以使用的名称,以便它们在新窗口中打开链接。该方法返回的引用是到js中可以使用的新窗口的唯一“链接”
无论如何,window.opener
属性应该仍然有效。您必须小心,尽管有相同的域安全限制等等(在规范页面中描述)。因此(从原始脚本)cw.opener
应该返回当前窗口对象。从新窗口中的脚本window.opener.cw
将引用它自己的窗口对象
要控制窗口何时关闭,完全可以让“开启器”窗口控制所有这些-毕竟它有对任何子窗口的引用,并且可以使用
cw.close()关闭它们
等。您可以使用组件.utils.reportError
打印到浏览器控制台。如何附加窗口。打开对文档中元素的调用?错误控制台显示的每个打印语句也会显示在浏览器控制台上。我没有将window.open()附加到文档中的任何元素。请记住,我的扩展是javascript代码,它适用于任何人加载到浏览器中的任何HTML文本节点内容(加上由我的window.open()调用创建的小窗口显示的文本节点内容)。因此,我的扩展代码javascript中的原始消息中显示了类似的代码。有关您编写的代码问题的问题必须在问题本身中描述特定的问题,并包括重现问题的有效代码。请参阅以获取指导。您必须拥有更多的代码。当鼠标滑过东西时,它不知道如何神奇地打开你的窗口。如何将网页连接到代码与它是否工作密切相关。请提供代码。几点。在实验之后,我发现window.open()
的第二个参数被分配给window.content.name
,而不是window.name
。我不知道为什么让原始(浏览器)窗口中的javascript扩展代码控制其他窗口的问题如下。当鼠标从一个创建的窗口传递到另一个窗口(或进入主浏览器窗口)时,它们需要关闭,但这些鼠标消息只会传递到鼠标所在的窗口。当然,从child->parent->parent传递这些信息可能有一些模糊的方式?
var test_cwname0 = cw.name;
var test_cwname1 = cw.content.name;