我正在为wordpress编写插件,并且为用户提供了一种登录我的服务的方式,当他们单击 login 时,会打开一个弹出窗口,其中显示了该服务的网站(位于网址与wordpress博客不同)。
因此,为了避免跨域错误,我使用postMessage效果很好,但是postmessage的第二个参数是将数据发送到的网站的域名。
我做了很多研究,所有示例似乎都将域名直接硬编码到其中,但是由于它是wordpress插件,所以任何域都可以去那里。
因此,我想获取父窗口的域名(打开弹出窗口的域名)。
我注意到firefox manages to extract the url 在使用开发人员工具时,但由于几乎所有属性都受到限制,我似乎无法自行完成。
那么如何获取弹出窗口的父窗口的url /域名?
答案 0 :(得分:1)
Same Origin Policy禁止JavaScript访问页面在不同来源上的位置。
但是,从文档链接到:
targetOrigin
以文字字符串“ *”(表示无首选项)或URI的形式指定要分派事件的targetWindow的原点。
如果您希望将消息阅读限制为选择一个来源(不公开),则可以尝试依次向每个消息发布消息,也可以让父母将消息的来源发送给孩子(通过postMessage
-尽管在时间安排上存在问题,因为您必须等待新页面加载-或在请求页面时只需将其传递到查询字符串中即可。
答案 1 :(得分:-1)
通过添加到打开弹出窗口的服务网站末尾的查询字符串将其传递到登录页面。
示例:
var myservice = 'myservice.com?'+window.location.href;
然后从您的站点中获取所需的零件并创建一个变量,并将其替换为硬编码地址。
获得零件:
var prot = window.location.protocol;
var dom = window.location.host;
var path = window.location.pathname;
var qry = window.location.search;
document.getElementById("demo").innerHTML = dom + path + qry;