相当于 FF 和 IE 中的“window.location.ancestorOrigins”

问题描述 投票:0回答:5

以下是用于从 iFrame 获取父窗口 URL 的 Google Chrome 版本。

window.location.ancestorOrigins;

我正在寻找与上述 FireFox 和 IE 声明等效的内容。是否可以实现呢?

尝试使用

document.referrer
也仅给出 iFrame Url。

javascript google-chrome firefox internet-explorer-9 microsoft-edge
5个回答
5
投票

不幸的是,FireFox 和 IE 没有与祖先起源相当的东西。

在获取父 URL 方面,您能做的最好的事情就是

document.referrer
,不幸的是,如果您正在处理 iframe,这意味着您可能无法访问外部页面并获取网页的真实 URL。


1
投票

我做了这样的事情:

function getAncestorOrigins() {
  if (location.ancestorOrigins !== undefined) {
    return [...location.ancestorOrigins];
  }
  const urls = [];
  let parentWin = window;
  while (parentWin !== window.top) {
    if (parentWin.document.referrer) {
      try {
        const url = new URL(parentWin.document.referrer);
        urls.push(url.origin);
      } catch (e) {
        // console.error
      }
    }
    // @ts-ignore
    parentWin = parentWin.parent;
  }
  return urls;
}

0
投票

我找到了这个替代解决方案。这对我有用...

var url = window.location != window.parent.location ? 
           document.referrer :
           document.location.href;


0
投票

一种方法是检查

window.parent[0].top.document
是否存在。

如果查询此对象时没有收到错误,则假设它位于同一域中,否则假设它位于不同域中。

var origins = location.ancestorOrigins;
if ( ! origins ) {
  origins = { "length": 1 };
  try {
    if ( window.parent[0].top.document )
      // Chrome & Firefox (same domain)
      origins[0] = location.origin;

  } catch(err) {
    // Firefox (different domains CORS policy)      
    origins[0] = "*";
  };
};
console.log(origins)
if ( origins[ origins.length -1 ] == location.origin ) {
  // same domain
  alert("Hello word!");

} else {
  // different domains
  var message = 'alert("Hello word!");';
   window.parent.postMessage( message, origins[ origins.length -1 ] );
};

© www.soinside.com 2019 - 2024. All rights reserved.