Facebook 的应用内浏览器:如何将数据发送回调用页面?

问题描述

我有一个页面,它用 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 (将#修改为@)