Я пытаюсь получить все 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, но работает в настольном сафари.
Советы очень ценятся.
Примечание: веб-страница не моя