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:

http://code.google.com/p/chromium/issues/detail?id=136610&q=window.opener&colspec=ID%20Pri%20Mstone%20ReleaseBlock%20OS%20Area%20Feature%20Status%20Owner%20Summary

但似乎iframes可以处理父属性,所以也许你可以将你的应用程序从使用弹出窗口转换为使用叠加层。

此代码解决了您正在讨论的问题(特别是针对Chrome ios不喜欢“弹出窗口”的问题),但是参考Paypal Adaptive Payments,它会打开“弹出窗口”并重定向到Paypal页面进行付款。

关键是你必须:

  1. 直接从按钮/链接点击启动window.open
  2. 你必须使用_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(); }