【发布时间】: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