首页 > 解决方案 > 如何在 Facebook 应用内浏览器中接收邮件?

问题描述

我正在尝试从打开的窗口将邮件发送到 Facebook 应用程序浏览器中的开启器,但“开启器窗口”从未收到消息。问题的原因可能是什么?

接收方:

window.addEventListener('message', function (e) {
    window.console.log("on message: " + e.data); 
}, false)

发送方:

window.opener.postMessage('any Message', document.location.origin);

标签: javascriptfacebookwebview

解决方案


如果没有看到更多代码,很难说清楚,但是就像这个通过 javascript 打开 facebook 连接窗口一样?回答状态,如果您尝试访问 oAuth 页面,这是不可能的。

向我们展示您在哪里获得变量 window.opener,这可能会添加一些上下文。

如果您从 window.open(/ page /) 打开它,它似乎被特别阻止:我如何绕过 该问题中提到的window.opener 跨域安全:

笔记

社交注册不适用于 iframe 中的 google、FB 等。我相信他们出于安全原因不允许使用它们。

同样来自window.opener 在重定向后为空

每当您导航到不同的主机时(出于安全原因),window.opener 都会被删除,因此无法绕过它。如果可能的话,唯一的选择应该是在一个框架内付款。顶部文档需要保留在同一主机上。

但正如引用的第二个答案中提到的,不是在打开的页面上使用 window.opener,而是从原始页面做所有事情,并且(如果您可以访问弹出窗口的源),在另一个页面上创建一个 onmessage,比如在那里接受的答案中提到,正确的方法只是相反:

反过来做。从主(打开器)窗口跟踪子弹出窗口的状态,您可以轻松知道子窗口何时导航回您的域,因此您可以再次“交谈”它。但不要自行关闭子窗口。让 opener 窗口从子窗口获取结果,然后关闭它。

参考:https ://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Example

例如,在您的起始页面中,执行以下操作:

var popup = window.open(/*some URL*/);
popup.postMessage("hi");
addEventListener("message", function(e) {
    console.log(e);
    e.source.postMessage("Hi there"); //official workaround for window.opener on other page
})

然后在您的“/ some URL /”源代码页面中,执行以下操作:

addEventListener("message", function(e) {
    console.log(e);
    e.source.postMessage("hi back");
});

并且只是玩弄该策略,但似乎 window.opener 不在图片中。试试 console.logging 它,它只是说空。


推荐阅读