javascript на iOS Swift нужно подождать, пока динамический контент не загрузится через XMLHttpRequest - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь получить все URL-адреса с расширением .pdf со страницы, используя WKScriptMessageHandler. URL-адреса pdf не отображаются на странице, пока пользователь не щелкнет элемент, который загружает эти URL-адреса.

Это то, что я использую, чтобы "щелкнуть" по всем элементам, и это открывает URL-адреса в формате PDF

var element = document.querySelectorAll('[onclick*="javascript:ExpCollGroup"]');

                for (var node of element){
                     node.click();
                }

Теперь мне нужно извлечь все эти URL, чтобы скрипт продолжал с

 var nodes = document.querySelectorAll('a[href$=".pdf"]');

          for (var circular of nodes){
               urls.push(circular.getAttributeNode('href').nodeValue);
            }


           if (urls.length > 0){
              window.webkit.messageHandlers.didFetchURLsFromServer.postMessage(urls);


            }

Массив узлов пуст, поэтому остальная часть кода на самом деле не выполняется.

полный скрипт ниже

webView.evaluateJavaScript("""

        if (document.readyState === 'complete') {

           var urls = [];
           var element = document.querySelectorAll('[onclick*="javascript:ExpCollGroup"]');

            for (var node of element){
                 node.click();
            }

//The code below runs before the loop has loaded its content
//Preventing the nodes array from being populated.
//The only thing that seems to work is setting setTimeout function. 
//I guess I need a call back when node.click() runs its last action of the loop

           var nodes = document.querySelectorAll('a[href$=".pdf"]');

          for (var circular of nodes){
               urls.push(circular.getAttributeNode('href').nodeValue);
            }


           if (urls.length > 0){
              window.webkit.messageHandlers.didFetchURLsFromServer.postMessage(urls);
              }


    }

                    """, completionHandler: nil)

это если документ не учитывает новые теги привязки с необходимыми URL-адресами. Когда я запускаю тот же сценарий на рабочем столе Safari, он работает, но в iOS массив URL-адресов остается равным 0.

Я пытался использовать Promise, но не запускается на iOS, но работает в настольном сафари. Советы очень ценятся. Примечание: веб-страница не моя

...