坚持命名 window.open() tab

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

背景。 我在 Firefox 中工作。我正在创建一个文档页面,其中包含在后台运行的 Apache Solr 实例的示例查询(作为超链接)。

问题。 我发现当我通过超链接(不是输入元素)向 Solr 发送查询时,我需要(1)加载该搜索页面; (2) 然后执行查询。

此外,我发现我为示例查询重用的命名页面(窗口/选项卡)需要集中精力才能正常工作。

因此,我(1)打开搜索页面; (2) 等待该页面完全加载,然后打开查询 URL。

我已经创建了一个最小的例子来展示这个问题,调用 example.com 代替我的搜索页面(1.,上面);然后过了一段时间,调用第二个 URL(Google 或 Bing,代替上面 2 中的搜索查询)。

我认为这个问题与此处接受的答案中的最后一句话有关:

检查浏览器选项卡是否已经打开,所以我不会制作额外的选项卡

...一旦用户刷新页面,该引用就会丢失。

在我的代码中,如果我使用

my_window = window.open("", "my_tab");

然后

setTimeout()
执行,打印到控制台。

如果我用

my_window = window.open("", "my_tab").focus();

然后(根据上面的 StackOver 流程链接)我相信

my_window
对象丢失了,因此
setTimeout()
永远不会执行。

问题:我怎样才能持久化命名的窗口/选项卡对象(

my_window
)?
localStorage
? ...


JSFiddle: https://jsfiddle.net/vstuart/1yfeqkz9/4/


<html lang="en">
<head>

<script>
  function apple(obj) {
    globalThis.link = (obj.getAttribute("href"))
    console.log('[apple] link:', link);

    <!-- ISSUE HERE: -->
    // my_window = window.open("", "my_tab").focus();
    my_window = window.open("", "my_tab");
    
    my_window.location = "https://example.com/";

    setTimeout("banana(link)", 2000);
    return false;
    }

  function banana(link) {
    console.log('[banana] link:', globalThis.link);
    my_window.location=globalThis.link;
  }
</script>
</head>

<body>

<ul>
  <li><p><a target="my_tab" onclick="apple(this); return false;" href="https://bing.com/">Bing.com</a></p></li>

  <li><p><a target="my_tab" onclick="apple(this); return false;" href="https://google.com/">Google.com</a></p></li>
</ul>

</body>
</html>
javascript html settimeout window.open
1个回答
1
投票

您可以在作业完成后拨打

.focus()

let my_window = window.open("", "my_tab")
my_window.focus()

当你使用

my_window = window.open("", "my_tab").focus();

问题是 my_window 被分配了 focus 的返回值,而不是 window.open.

的返回值
© www.soinside.com 2019 - 2024. All rights reserved.