为什么我的firefox扩展javascript不能访问opener窗口而看不到window.name

为什么我的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",

我正在编写一个javascript扩展,但遇到了一些无法解决的问题

我的扩展非常简单,它没有向firefox浏览器添加任何GUI元素。它所做的是观察鼠标在firefox浏览器中加载的任何文档中移动,当鼠标停留在文本节点中的“术语”(单词、短语、首字母缩略词)上时,它通过调用以下命令创建并显示一个小的、无边框的弹出窗口,看起来类似于术语上方的工具提示:

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;