首页 > 解决方案 > 调用 evaluateJavaScript 时出现 Javascript 异常

问题描述

我的目标:

预期结果:

从 WKWebView通过evaluateJavaScript运行脚本应该允许我单击结帐按钮并将产品添加到购物车。

实际结果:

通过evaluateJavascript运行我的脚本会给我一个 javascript 异常(如下提供):

Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={
    WKJavaScriptExceptionLineNumber=0, 
    WKJavaScriptExceptionMessage=, 
    WKJavaScriptExceptionColumnNumber=0, 
    NSLocalizedDescription=A JavaScript exception occurred
}

与从 evaluateJavaScript 获取 javascript 异常相关的类似问题不同,我的异常返回了一个相当广泛的异常。“WKJavaScriptExceptionMessage”通常具有很强的描述性,但我无法从中获取任何有价值的信息来解决我的 javascript 问题。

测试时,脚本在 google chrome 和 safari 检查器(用于移动设备)的控制台上运行良好。它能够毫无问题地执行预期结果。所以我不确定为什么在从evaluateJavascript运行脚本时首先会出现异常。

如果你好奇,这是我的初始化/viewDidLoad 代码:

let config = WKWebViewConfiguration()
let contentController = WKUserContentController()

config.processPool = CurrentProcessPool.shared.getCurrentProcessPool()
config.websiteDataStore = WKWebsiteDataStore.default()
config.userContentController = contentController

let webViewModel = WKWebView(frame: window.bounds, configuration: config)
let productPageLink = "https://click.linksynergy.com/link?id=7yE5K5lr0eU&offerid=639733.3977&type=15&murl=https%3A%2F%2Fwww.rebeccaminkoff.com%2F%2F%2Fproducts%2Fsandra-puffer-f19100911-khaki"
let url = myURL(string: productPageLink) 

DispatchQueue.main.async {
    webViewModel.load(URLRequest(url: url))
}

这是我加载脚本的地方:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
        let size = "XXS"
        let myScript = """ 

        document.querySelector('.size-select [data-size-option = "\(size)" i]').click()
        document.querySelector('.add-to-cart').click()


        """

        webView.evaluateJavaScript(myScript, completionHandler: { (result, error) in
            print(result)
        print(error)
    })
}

让我知道是否有需要澄清的地方,我很乐意填写这些信息。

myScript 打印内容:

     window.onerror = function(){
        return true;
        }

        document.querySelector('.size-select [data-size-option = "XXS" i]').click()
        document.querySelector('.add-to-cart').click()

任何关于为什么 javascript 异常没有提供更详细信息的见解都会很棒! 谢谢!

标签: javascriptjqueryiosswiftwkwebview

解决方案


推荐阅读