【问题标题】:Chrome JavaScript location objectChrome JavaScript 位置对象
【发布时间】:2025-11-22 17:15:02
【问题描述】:

我正在尝试通过使用与这些应用程序关联的自定义协议名称从浏览器启动 3 个应用程序。这对于在 * 上启动的其他线程来说可能看起来很熟悉,我相信它们无助于解决这个问题,所以请暂时不要关闭此线程,它需要与其他线程中建议的方法不同的方法。

示例:

ts3server://a.b.c?property1=value1&property2=value2
...
...

我会启动这些应用程序

location.href = ts3server://a.b.c?property1=value1&property2=value2
location.href = ...
location.href = ...

适用于 FF 但不适用于 Chrome

我认为可以通过优化写入次数来有效地仅存在最后一次更改。

所以我这样做了:

function a ()
{
  var apps = ['ts3server://...', 'anotherapp://...', '...'];

  b(apps);
}

function b (apps)
{
  if (apps.length == 0) return;

  location.href = apps[0]; alert(apps[0]);

  setTimeout(function (rest) {return function () {b(rest);};} (apps.slice(1)), 1);
}

但这并没有解决我的问题(实际上只考虑了第一个 location.href 分配,即使其他调用在第一个调用之后发生足够长的时间(感谢将超时延迟更改为 10000 ) 应用程序未启动(显示警报)。

如果我尝试分别访问每个 URI,应用程序就会启动(首先我通过单击一个按钮调用 location.href = uri1,然后通过再次单击另一个按钮调用 location.href = uri2)。

替换:

location.href = ...

与:

var form = document.createElement('form');
form.action = ...
document.body.appendChild(form);
form.submit();

也没有帮助,也没有:

var frame = document.createElement('iframe');
frame.src = ...
document.body.appendChild(frame);

有可能做我想做的事吗?怎么做?

编辑:

重新措辞的摘要

我想在单击链接或类似元素的按钮后启动多个应用程序。我想通过启动与自定义协议相关的应用程序来实现这一点......我会保存一个链接列表(在每个链接中使用一个协议),我会尝试对所有项目执行“location.src = link”列表。当与“for”一起使用时,它确实优化为只分配一次(最后一个值),所以我使函数类似于带有延迟的递归函数(这消除了优化并真正强制 3 个不同的 location.src = list[head] 调用)该列表在每次调用之前都会被切片,以便考虑所有链接并将它们分配给 location.src。这在 Mozilla Firefox 中一切正常,但在 google 中,在第一次分配后,其余分配失效(它们可能已执行但不会触发相关的应用程序启动))

【问题讨论】:

  • 如果 Aidan 的回答有帮助,那么您应该支持它。如果这是您收到的对此问题的最佳答案,那么您可以单击投票箭头下方的复选标记来选择他的答案。谢谢,欢迎来到 SO!
  • @dotanchoen 再次感谢

标签: javascript google-chrome chromium


【解决方案1】:

您在遍历元素时遇到问题吗?如果是这样,请尝试 for..in 语句 here

或者您在导航时遇到问题?如果是这样,请尝试 window.location.assign(new_location);

[编辑] 你也可以使用 window.location = "...";

[编辑] 好的,所以我做了一些工作,这就是我得到的。在示例中,我打开一个随机的黑桃 A 链接。这是一个自定义协议。点击here,然后点击“点击我”。 cmets 显示 JSFiddle 调试器发现错误的位置。

【讨论】:

  • 这有帮助吗?请告诉我。
  • 循环是可以的(提醒 uris 会弹出正确的警报框),window.location = "..." 也不是 window.location.assign("...") 帮助。无论如何,谢谢,任何其他想法也将不胜感激。
  • 我会把你的代码放在 jsfiddle 上,然后呃……摆弄它。那我看看我能不能让它工作。
  • @JakubDaniel 这是新的答案。它工作得很好。我还添加了 cmets 以显示 JSFiddle 调试器发现错误的位置。
  • 那么建议的代码 sn-p 不会遍历数组,因此它无法打开所有链接