Swift - значения, поступающие в WKURLSchemeHandler, верны с первого раза, а затем никогда не меняются - PullRequest
1 голос
/ 05 октября 2019

Я немного новичок в программировании на Swift и, возможно, использую некоторую конструкцию, которая делает значение неизменным после его однократной установки. У меня есть WKWebView, на котором выполняется веб-приложение JavaScript, и в этом JS URL-адрес вызывается следующим образом:

var url = 'testscheme://x-callback/test?unique=' + new Date().getTime() + 'Z';
window.location = url;
Ext.toast(url, 30000);

, что, в свою очередь, запускает расширение, указанное ниже в моем коде Swift. Проблема в том, что при первом вызове расширения у него правильный URL-адрес, полученный от JS;но после этого кажется, что первый URL как-то «застрял», и каждый раз, когда он вызывается снова, он продолжает печатать первые значения URL вместо значений из любых последующих вызовов, которые содержат различную информацию.

extension VCWebView: WKURLSchemeHandler {
    // any requests for a URL scheme should arrive here
    func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) {
        print("In WKURLSchemeHandler webView()")
        print("url absolute string requested: " + (urlSchemeTask.request.url?.absoluteString ?? "{nil}"))
        // THE LINE above is where it should be printing a unique value every time it is run,
        // but gets stuck with the value from the first time it was run
    }

    // not used
    func webView(_ webView: WKWebView, stop urlSchemeTask: WKURLSchemeTask) {
    }

}

Я знаю, что JS отправляет уникальную информацию, потому что когда я закрываю приложение и запускаю его снова, оно снова имеет уникальное значение в первый раз, но затем продолжает показывать это первое уникальное значение каждый раз, когда оно запускается снова послеэто. Есть некоторые записи в файле журнала, которые я не понимаю (4 в 09:42:01 после второй попытки):

testscheme url scheme registered
in VCWebView.swift viewDidLoad()
{1ST ATTEMPT}
09:41:12.904692-0700 MyApp[51948:6316047] [ProcessSwapping] 0x10a1842c0 - ProvisionalPageProxy::ProvisionalPageProxy: pageID = 6 navigationID = 4 suspendedPage: 0x0
In WKURLSchemeHandler webView()
url absolute string requested: testscheme://x-callback/test?unique=1570293672897Z {THIS IS WHAT JS SENT: ...897Z so this one is correct}
{2ND ATTEMPT}
09:42:01.516773-0700 MyApp[51948:6316047] [ProcessSwapping] 0x10a1842c0 - ProvisionalPageProxy::didFailProvisionalLoadForFrame: pageID = 6, frameID = 1, navigationID = 4
09:42:01.520345-0700 MyApp[51948:6316047] [ProcessSwapping] 0x10a184420 - ProvisionalPageProxy::ProvisionalPageProxy: pageID = 6 navigationID = 5 suspendedPage: 0x0
09:42:01.632990-0700 MyApp[51948:6316047] [ProcessSuspension] 0x10a1f72d0 - ProcessAssertion::processAssertionWasInvalidated()
09:42:01.633186-0700 MyApp[51948:6316047] [ProcessSuspension] 0x10a1f7f00 - ProcessAssertion::processAssertionWasInvalidated()
In WKURLSchemeHandler webView()
url absolute string requested: testscheme://x-callback/test?unique=1570293672897Z {THIS IS WHAT JS SENT: ...512Z}
09:42:31.520976-0700 MyApp[51948:6316047] [assertion] Error acquiring assertion: <NSError: 0x600002efdcb0; domain: RBSAssertionErrorDomain; code: 2; reason: "Specified target process does not exist">
09:42:31.521453-0700 MyApp[51948:6316047] Could not signal service com.apple.WebKit.WebContent: 113: Could not find specified service

Эти записи в файле журнала, вероятно, объясняют, почему это не удается, но я незнаю, как это исправить. Есть идеи, что я делаю не так?

...