微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。