Chrome 等同于FF和IE中的“window.location.ancestorOrigins”

kdfy810k  于 2023-08-01  发布在  Go
关注(0)|答案(5)|浏览(106)

以下是从iFrame获取父窗口URL的Google Chrome版本。
window.location.ancestorOrigins;
我正在寻找相当于上述声明的火狐和IE浏览器。是否有可能实现。
尝试使用document.referrer也只给出iFrame URL。

f1tvaqid

f1tvaqid1#

不幸的是,Firefox和IE没有与祖先起源等效的版本。
获取父URL的最佳方法是document.referrer,不幸的是,如果您正在处理iframe,这意味着您可能无法访问外部页面并获取网页的真实URL。

xzv2uavs

xzv2uavs2#

我做了这样的事情:

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;
}

字符串

xmq68pz9

xmq68pz93#

我找到了另一个解决方案。这对我来说很有效...

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

字符串

gzszwxb4

gzszwxb45#

一种方法是检查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] = "*"; // force any domain
  };
};
console.log( origins, location.origin )
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 ] );
};

字符串

相关问题