Запуск функции shouldStartLoadWithRequest с несколькими вызовами window.location.href

Я пытаюсь передать несколько вещей с веб-страницы внутри UIWebView обратно в мое приложение iPhone с помощью метода shouldStartLoadWithRequest UIWebView.

В основном моя веб-страница вызывает window.location.href = “command: // foo = bar”, и я могу перехватить то, что в моем приложении не проблема. Теперь, если я создаю цикл и выполняю сразу несколько вызовов window.location.href, тогда должно появляться только сообщение whenStartLoadWithRequest, которое вызывает вызов один раз, и вызов, который он получает, является самым последним запуском window.location.href в конце цикла.

То же самое происходит с веб-браузером для Android, обрабатывается только последний файл window.location.href.

    iFrame = document.createElement("IFRAME"); iFrame.setAttribute("src", "command://foo=bar"); document.body.appendChild(iFrame); iFrame.parentNode.removeChild(iFrame); iFrame = null; 

    Таким образом, это создает iframe, устанавливает его источник в команду im, пытающуюся перейти к приложению, тогда как только его добавление к телу shouldStartLoadWithRequest вызывается, тогда мы удаляем iframe из тела и устанавливаем его в null для освобождения память.

    Я также тестировал это на веб-просмотре Android, используя shouldOverrideUrlLoading, и он также работал правильно!

    Я тоже ударил эту проблему, и вот мое решение, которое работает для меня. Все мои функции JavaScript используют эту функцию __js2oc (msg) для передачи данных и событий в Objective-C через shouldStartLoadWithRequest: PS замените команду «:» вашим триггером «appname:», который вы используете.

     /* iPhone JS2Objective-C bridge interface */ var __js2oc_wait = 300; // min delay between calls in milliseconds var __prev_t = 0; function __js2oc(m) { // It's a VERY NARROW Bridge so traffic must be throttled var __now = new Date(); var __curr_t = __now.getTime(); var __diff_t = __curr_t - __prev_t; if (__diff_t > __js2oc_wait) { __prev_t = __curr_t; window.location.href = "command:" + m; } else { __prev_t = __curr_t + __js2oc_wait - __diff_t; setTimeout( function() { window.location.href = "command:" + m; }, (__js2oc_wait - __diff_t)); } } 

    Нет, изменение url iframe не приведет к вызову shouldOverrideUrlLoading, по крайней мере, в Android 2.2.

    Давайте будем гением компьютера.