如何检查我是否可以访问window.opener?
如果我从一个未与我的页面(access denied
)连接的文件在新窗口中打开我的页面,则会出现错误。
代码:
if (window.opener) {
if (window.opener.document.getElementById('myHidden') !== "undefined") {
if (window.opener.document.getElementById('myHidden').value == "1" && $("#inputXYZ").val() != "1") {
在 2 行中发生错误。但只有当我从一个随机页面打开页面时(当然没有一个名为“myHidden”的输入字段)。 如果我从具有这种元素的“有效”页面打开页面,它就可以正常工作。
答案 0 :(得分:3)
您正在将元素实例与字符串 "undefined"
进行比较,并且您没有检查window.opener.document
是否存在(我不知道您是否必须或不,但它很容易添加)。你可能意味着:
// Note: Still not right, see below
if (typeof window.opener.document.getElementById('myHidden') !== "undefined")
...除了那仍然不正确之外,因为getElementById
在没有匹配元素时返回null
(不是undefined
)。
我是这样做的:
var input = window.opener &&
window.opener.document &&
window.opener.document.getElementById('myHidden');
var value = input && input.value;
if (value != "1") {
// Do something
}
它使用了奇怪强大的&&
运算符(近亲the curiously-powerful ||
operator)。如果window.opener
或window.opener.document
为“falsey”(null
或undefined
或0
或""
或{{NaN
,则第一项任务将会短路1}}或者,当然,false
- 而后四个不适用),导致input
为undefined
。如果input
为假,则第二个分配将短路,导致value
为undefined
。 undefined
!= "1"
,所以......
答案 1 :(得分:1)
检查您是否有权访问window.opener.document:
if (window.opener && window.opener.document) {
if (window.opener.document.getElementById('myHidden') !== "undefined") {
if (window.opener.document.getElementById('myHidden').value == "1" && $("#inputXYZ").val() != "1") {
}
}
}
如果你想确定加入支票window.opener.document.getElementById
e.g。
if (window.opener && window.opener.document && window.opener.document.getElementById) {
if (window.opener.document.getElementById('myHidden') !== "undefined") {
if (window.opener.document.getElementById('myHidden').value == "1" && $("#inputXYZ").val() != "1") {
}
}
}