背景。 我在 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>
您可以在作业完成后拨打
.focus()
。
let my_window = window.open("", "my_tab")
my_window.focus()
当你使用
my_window = window.open("", "my_tab").focus();
问题是 my_window 被分配了 focus 的返回值,而不是 window.open.
的返回值