window.opener未在iOS Chrome中设置
在一个文件中,我有
go
在https://stackoverflow.com/questions/14637937/window-opener-not-set-in-ios-chrome/t2.html
我有
document.write(window.opener);
在iOS上的Safari和Mac上的Chrome以及几乎所有其他浏览器上,它会像您期望的那样打印出[object Window]
。
在iOS上的Chrome上,我得到null
。
如何进入打开此窗口的窗口?
这似乎是一个更大的故事。 在这里查看Bugtracker:
但似乎iframes可以处理父属性,所以也许你可以将你的应用程序从使用弹出窗口转换为使用叠加层。
此代码解决了您正在讨论的问题(特别是针对Chrome ios不喜欢“弹出窗口”的问题),但是参考Paypal Adaptive Payments,它会打开“弹出窗口”并重定向到Paypal页面进行付款。
关键是你必须:
- 直接从按钮/链接点击启动window.open
- 你必须使用_blank作为窗口“名称”(而不是选择你自己的)
你想要/需要的主要是:
var win; //VERY IMPORTANT - You must use '_blank' and NOT name the window if you want it to work with chrome ios on iphone //See this bug report from google explaining the issue: https://code.google.com/p/chromium/issues/detail?id=136610 win = window.open(paypalURL,'_blank'); //Initiate returnFromPayPal function if the pop up window is closed if (win && win.closed) { returnFromPayPal(); }
这是您可以遵循的完整代码(忽略任何不适用于您正在做的事情)。
如果要将值从子节点传递给父节点,请使用以下代码。
将以下代码添加到父页面:
var hidden, state, visibilityChange; if (typeof document.hidden !== "undefined") { hidden = "hidden"; visibilityChange = "visibilitychange"; state = "visibilityState"; } else if (typeof document.mozHidden !== "undefined") { hidden = "mozHidden"; visibilityChange = "mozvisibilitychange"; state = "mozVisibilityState"; } else if (typeof document.msHidden !== "undefined") { hidden = "msHidden"; visibilityChange = "msvisibilitychange"; state = "msVisibilityState"; } else if (typeof document.webkitHidden !== "undefined") { hidden = "webkitHidden"; visibilityChange = "webkitvisibilitychange"; state = "webkitVisibilityState"; } // Add a listener that constantly changes the title document.addEventListener(visibilityChange, function () { if (localStorage.getItem("AccountName")) { $("#txtGrower").val(localStorage.getItem("AccountName")); } if (localStorage.getItem("AccountID")) { $("#hdnGrower").val(localStorage.getItem("AccountID")); } }, false);
在子页面中添加以下内容(任何首选事件)
function CloseChildAndLoadValuesToParent() { localStorage.setItem("AccountName", 'MyAccountName'); localStorage.setItem("AccountID", 'MyAccountID'); window.close(); }