问题描述
我有一个页面,它用 window.open("url") 打开一个弹出窗口,弹出窗口要求用户提供一些数据,然后自己关闭 (window.close();) 将控制权返回到初始页面,其中然后访问用户数据并显示在屏幕上。
基本上是这样的:
(...)
function listen(obj,evt,func) {
'addEventListener' in window ? obj.addEventListener(evt,func,false) : obj.attachEvent('on' + evt,func);
}
listen(window,'message',function(event){
receiveData(event.data);
}
);
// Renders the data gathered in the popup
function receiveData(data){
document.getElementById("text").innerHTML = data;
}
(...)
然后在弹出窗口中,我在从用户那里获取数据后将控制权返回到初始页面,如下所示:
var opener = window.opener
if (opener && opener.postMessage) {
opener.postMessage('<?PHP echo $_GET['data']; ?>','<?PHP echo $postMessageURL; ?>')
}
window.close;
这在 Chrome、FireFox 等中工作正常:用户在弹出窗口中输入数据并启动 postMessage,然后由初始页面捕获并呈现在屏幕中。
但是当我在 Facebook 的应用程序内浏览器中运行它时,不会执行 postMessage,也不会执行 window.close()。
我发现返回原始页面的唯一方法是执行 window.history.back(),但如果这样做,我会丢失用户在弹出窗口中输入的数据。
知道如何解决这个问题吗?
我该怎么办
A) 使 postMessage 起作用,在这种情况下我该如何关闭弹出窗口?
B) 以某种方式将弹出窗口中的数据存储在 cookie 或 localStorage 中,执行 window.history.back() 然后检索它?
C) 还有其他选择吗?
非常感谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)