javascript - 如何在 Facebook 应用内浏览器中接收邮件?
问题描述
我正在尝试从打开的窗口将邮件发送到 Facebook 应用程序浏览器中的开启器,但“开启器窗口”从未收到消息。问题的原因可能是什么?
接收方:
window.addEventListener('message', function (e) {
window.console.log("on message: " + e.data);
}, false)
发送方:
window.opener.postMessage('any Message', document.location.origin);
解决方案
如果没有看到更多代码,很难说清楚,但是就像这个通过 javascript 打开 facebook 连接窗口一样?回答状态,如果您尝试访问 oAuth 页面,这是不可能的。
向我们展示您在哪里获得变量 window.opener,这可能会添加一些上下文。
如果您从 window.open(/ page /) 打开它,它似乎被特别阻止:我如何绕过 该问题中提到的window.opener 跨域安全:
笔记
社交注册不适用于 iframe 中的 google、FB 等。我相信他们出于安全原因不允许使用它们。
每当您导航到不同的主机时(出于安全原因),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 它,它只是说空。
推荐阅读
- javascript - JS:为什么不返回带有`function`字的内部函数?
- cakephp - 如何更新在线服务器上更新的数据库表的模型
- c - 是否可以使 GCC 自动矢量化器输出内在函数而不是汇编?
- javascript - iOS 将 PDF 内容显示为纯文本
- authentication - SW=6300 从 Android 读取电子护照时出错
- android-studio - Android Studio 3.3 中缺少 Logcat 过滤器
- android - 我无法弄清楚如何在需要多个表查询的 Android Room @Query 注释查询中包含 WHERE 子句
- android - 如何返回到导航图的根?
- ms-access - 访问 VB IIf 和 dlookup
- javascript - 如何在没有 JS SDK 的情况下向 LinkedIn API v2 和 OAuth 2.0 发出请求?