如何使 html <a target='_parent'> 指向与 javascript window.opener 相同的值?

how to make html <a target='_parent'> point to the same as javascript window.opener?

在我的项目中,我有一个主页,用户可以在其中登录并查看主表,还有许多其他页面,这些页面以不同的方式打开 windows。

当登录超时时,用户应该无法访问任何内容。在主页面中,我再次给登录页面一个link。在sub-windows中我不能那样做,因为我不想在sub-window.

中完成登录

在javascript中,我可以使用window.opener访问主window(因为每个子window都是用window.open打开的) .我怎样才能在 html a 标签内做到这一点?

if (!login_check($conn)) { // tests if the user is connected
    // exits with a message, if not connected anymore
    exit("<p>You don't have authorization to access this page. Please, <a href='index.php' target='_parent'>go back to main screen and login</a>.</p>");
}

问题是:此代码在子 window 上打开登录页面,因此 target='_parent' 并不像我想的那样。实现此目标的正确方法是什么?

你不能。

target 仅允许您在当前 window/tab 中的帧之间导航。

只有 JavaScript 可以访问开启器。我没有测试以下内容,但它应该能为您指明正确的方向。

document.querySelector('.login-expired a').addEventListener('click', open_in_opener);

function open_in_opener(event) {
  window.opener.location = this.href;
  event.preventDefault();
}
<p class="login-expired">You don't have authorization to access this page. Please, <a href='index.php'>go back to main screen and login</a>.</p>

目标适用于框架和 iframe。你需要像这样处理javascript

 <a href="#" onclick="window.opener.location.href = 'index.php'; return false;">

祝你好运

如果您为原始 window 分配 window.name 属性 一些值(例如 "master"),那么您可以简单地通过 <a target="master">.

这是 dataURI 格式的简单概念验证:复制并粘贴到您的地址栏,仅 Chrome/Firefox;很难在这里模拟任何其他方式:

data:text/html,<script>window.name="master";</script>I am master. <button onclick="window.open('data:text/html,<a target=\'master\' href=\'data:text/plain,content for master from slave\'>Replace content of master</a>')">Open slave</button>

甚至可以从奴隶内部设置主人(开启者)name,但前提是两者具有相同的来源:

<a onclick='if(window.opener)window.opener.name=this.target=Math.random()' href='whatever'>Open whatever in opener, if any</a>

MDN: window.name