javascript - 调用 evaluateJavaScript 时出现 Javascript 异常
问题描述
我的目标:
- 运行 jquery 脚本以从“特定”第三方网站产品页面单击“添加到购物车”按钮。
预期结果:
从 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 异常没有提供更详细信息的见解都会很棒! 谢谢!
解决方案
推荐阅读
- php - 将字段从 WordPress 后端添加到 woocommerce 邮件
- sql - SQL 表更新有效,但仅从一行中获取值
- angular - 如果切换幻灯片设置为 false(关闭状态)并在使用 Angular 单击切换幻灯片时启用,如何禁用按钮?
- mysql - 正确更新 mysql 列
- reactjs - Antd Table 渲染内部属性和对象数组
- python - 如何在python中提取Bzip2文件
- swift - 如何使用 swift 获取安全网页的公钥
- vue.js - vue在使用动态组件和动态导入时无法获取组件引用
- javascript - 数字字符串 NaN 错误更正解决方法
- quasar-framework - 如果我可以更改或设置 Quasar 通知插件的动画持续时间?