Chrome JavaScript местоположение объекта - PullRequest
3 голосов
/ 15 февраля 2012

Я пытаюсь запустить 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 назначение, и хотя другие вызовы происходят достаточно долго после первого (благодаря изменению времени ожидания, скажем, 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);

Можно ли сделать то, что я пытаюсь сделать? Как это будет сделано?

EDIT:

перефразированное резюме

Я хочу запускать НЕСКОЛЬКО приложений после одного нажатия на ссылку или элемент, похожий на кнопку. Я хочу добиться этого с помощью запуска приложений, связанных с пользовательскими протоколами ... я бы держал список ссылок (в каждой ссылке есть один используемый протокол), и я бы попытался сделать "location.src = link" для всех элементов список. Который при использовании с 'for' оптимизирует присвоение только один раз (последнее значение), поэтому я делаю функцию чем-то вроде рекурсивной функции с задержкой (что исключает оптимизацию и действительно вызывает 3 разных вызова location.src = list [head], когда список разбивается перед каждым вызовом, так что все ссылки учитываются и назначаются для location.src. В Mozilla Firefox все это прекрасно работает, но в google, после первого назначения остальные назначения теряют силу (они, вероятно, выполняются, но не запускают связанный с ним запуск приложения))

1 Ответ

1 голос
/ 17 февраля 2012

У вас есть проблемы с циклическим прохождением элементов?если это так, попробуйте оператор for..in здесь

Или у вас проблемы с навигацией?если это так, попробуйте window.location.assign (new_location);

[edit] Вы также можете использовать window.location = "...";

[edit] Хорошо, так что я поработали вот что я получил.в примере я открываю случайную ссылку туз пик.который является пользовательским протоколом.нажмите здесь , а затем нажмите кнопку «нажмите меня».В комментариях показано, где отладчик JSFiddle обнаружил ошибки.

...