WKWebView加载文档时如何运行JS控制window.scrollTo(x,y)

How WKWebView runs JS to control window.scrollTo(x,y) when loading document

我在使用WKWebView的时候,希望ONLoad可以加载JS。在之前的UIwebView中,这个方法是可以的。现在我必须监视 HTML 是否加载,然后执行 ONLoad 参数。 JS不能同步执行,比以前慢了。很多。

我通过JS控制window.scrollTo(x,y)实现当他进入文档阅读时,会自动恢复到上次阅读进度。在之前的UIwebView中,他是同步触发的

目前我用的是WKWebView,他必须先判断加载完成HTML,然后触发这个JS,我试过在加载HTML的时候执行,但是这样是无效的, WKWebView 控件加载 JS 变得很慢,希望能找到解决办法,希望有人能帮帮我,我不太懂英文,所以这是 Google 翻译的结果。

您可以像这样注入一个应该在加载时执行的脚本:

NSString *scriptString = @"window.scrollTo(0,1000);";
WKUserScript *script = [[WKUserScript alloc] initWithSource:scriptString injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
[self.webView.configuration.userContentController addUserScript:script];

在这里你可以找到WKUserScript的文档:https://developer.apple.com/documentation/webkit/wkuserscript?language=objc

如果注入时间还为时过早,您可以尝试添加一个 WKNavigationDelegate 并调用您的脚本,如下所示(抱歉 Swift 代码,也许有人可以编辑并转换为 objective-c)

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
  self.webView.evaluateJavaScript("document.readyState", completionHandler: { (complete, error) in
    if complete != nil {
      self.webView.evaluateJavaScript("window.scrollTo(0,1000);")
    }
  })
}