Chrome JavaScript位置对象

时间:2012-02-14 23:04:56

标签: javascript google-chrome chromium

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

示例:

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赋值,即使其他调用在第一个调用后发生的时间足够长(感谢更改超时延迟,让我们说{ {1}})应用程序无法启动(显示警报)。

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

更换:

location.href = uri2

使用:

location.href = ...

也没有帮助,也没有:

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

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

编辑:

重写摘要

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

1 个答案:

答案 0 :(得分:1)

您是否在循环元素时遇到问题?如果是这样,请尝试使用for..in语句here

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

[编辑] 您也可以使用window.location =“...”;

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