我正在为wordpress编写一个插件,我为用户提供了一种登录我的服务的方式,当他们点击登录弹出窗口打开服务的网站(与wordpress博客不同的网址)。
所以为了避免跨域错误,我使用postMessage这很好用,但postmessage的第二个参数是发送数据的网站的域名。
我做了很多研究,所有的例子似乎都直接将域名硬编码到其中,但由于它是一个wordpress插件,任何域都可以去那里。
所以我想得到父窗口的域名(打开弹出窗口的域名)。
我注意到firefox manages to extract the url在使用开发人员工具时,但我似乎无法自己做,因为几乎所有的属性都受到限制。
那么如何获取弹出窗口的父窗口的url / domain名称?
同源策略禁止JavaScript访问不同来源的页面位置。
但是,从您链接到的文档:
targetOrigin 指定targetWindow的原点必须是要调度的事件,可以是文字字符串“*”(表示没有首选项),也可以是URI。
如果你想将信息阅读限制在原始选择(不公开),那么你可以尝试依次向每个人发布信息,或者你可以让父母将其原始信息发送给孩子(通过postMessage
- 尽管由于您必须等待新页面加载 - 或者只是在请求页面时将其传递给查询字符串,因此会出现计时问题。
通过添加到服务网站末尾的查询字符串将其传递到您的登录页面,打开您的弹出窗口。
例:
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;