【问题标题】:Unable to set property 'URL' of undefined or null reference无法设置未定义或空引用的属性“URL”
【发布时间】:2015-11-13 00:44:07
【问题描述】:

我有一个带有 javascript 变量和定义的函数的窗口:

// in window 1:
<SCRIPT>
var someVariable = "hello, world";
function myFunc(msg) {
    alert(msg);
}
</SCRIPT>

我从第一个窗口中的链接打开第二个窗口,并获取对打开器的引用:

// in window 2:
var windowOpener = window.opener;

第二个窗口打开第三个窗口,其中包含以下脚本:

// in window 3:
alert(window.parent.windowOpener.someVariable);

上面的行正确打印了“hello, world”。但是,然后我尝试在窗口 1 上执行该函数,因此:

// in window 3:
window.parent.windowOpener.myFunc("hi, world");

这会引发以下异常:

“无法设置未定义或空引用的属性‘URL’”

我的环境是 javascript、Velocity 和 Struts,所以这些窗口不是通过“window.open”调用打开的,而是通过调用转发到 vm 文件的操作类来打开的。我的猜测是这与它有关,但为什么变量引用会起作用但函数调用不起作用?

【问题讨论】:

  • 你没有在你提供的代码中设置URL,所以你在最后一段的猜测是正确的。
  • 谢谢。奇怪的是我根本没有在任何地方设置 URL。您所看到的只是纯 javascript —— 在这部分代码中它根本没有利用速度或 struts。似乎是底层的 js 脚本引擎(兼容模式下的 IE 11)在做某事。我无法在任何地方找到此行为的参考。
  • 而“if (window.parent.windowOpener.myFunc)”计算结果为真!

标签: javascript


【解决方案1】:

尝试将函数赋值给一个变量,即

// in window 1:
<SCRIPT>
var someVariable = "hello, world";
var myFunc = function(msg) {
    alert(msg);
}
</SCRIPT>

根据您提供的代码很难说别的,因为您没有在其中的任何地方设置 URL 属性。可能是您的环境的配置问题。

【讨论】:

  • 感谢您的出色建议...但我仍然遇到同样的异常。 “window.parent.windowOpener”变量显然包含对打开窗口的有效引用,但我无法执行函数——我只能访问变量。
  • 我的猜测是,您的 vm 文件配置有些奇怪,就像您在问题末尾所说的那样。很难说没有看到更多代码,因为您编写的任何内容都不正确:\
猜你喜欢
  • 2015-03-30
  • 2014-07-23
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 2014-08-01
相关资源
最近更新 更多