我使用WKWebView,我想在网站完全加载时得到通知。当document.readyState为interactive或complete时,会触发WKNavigationDelegate的webView:didFinishNavigation方法,并且我希望确保该站点已完全加载。我想出了使用JavaScript注入的解决方案。这是我的MWE:
import UIKit
import WebKit
class ViewController: UIViewController, WKScriptMessageHandler, WKNavigationDelegate {
var we
我在iOS中使用UIWebView,并与js通信。我使用JSContext获取以下js回调:
public typealias jsBridgeFuncAlias = (JSValue)->Void
@objc
protocol WebViewJSExport:JSExport {
var call:jsBridgeFuncAlias?{get}
}
class SAJavaScriptBridge:NSObject,WebViewJSExport{
public var call: jsBridgeFuncAlias?
public init(context:JSContext){
我正在使用一个WKWebView,我需要从服务器获取一些Javascript,并在我的WKWebView上执行这个javascript。
基本上,为了拥有这个javascript,我调用了一个API来发送一个JSON,如下所示:
{
"script" : "function()..." // the content of the script is a string here
}
所以我的问题是:我如何注入这个脚本?我首先需要创建一个包含此内容的JS文件,对吗?到目前为止,我是从最初添加到我的项目中的文件注入JS的。
我知道我可以创建一个这样的文件:
N
我让WKWebview加载一个网页,如下所示:
class SafariExtensionViewController: SFSafariExtensionViewController, WKNavigationDelegate {
static let shared = SafariExtensionViewController()
var webView: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
se
我很难从UIViewRepresentable WKWebView内部运行javascript文件。这可能是一个简单的问题,有一个简单的答案,但我似乎不明白这一点。我对Swift和iOS编程很陌生。
我想从一个传递给UIViewRepresentable of WKWebView的HTML字符串中链接到一个javascript文件。据我所知,Javascript没有运行。
ContentView:
import SwiftUI
struct ContentView: View {
var body: some View {
let HTMLString =
我正在尝试注入一个自定义的WebKit脚本消息处理程序。我的控制器和视图都被正确加载了。然而,在JS端(从Safari控制台),window.webkit.messageHandlers是空的。知道为什么吗?我的应用程序使用的是iOS 8.1,但即使升级到9.2,它也无法工作。
import Foundation
import UIKit
import WebKit
public class FooController: UIViewController, WKScriptMessageHandler {
private var wkWebView: WKWebView?
是否可以使用WKWebView在JavaScript和Swift/Obj-C原生代码之间进行同步通信?
这些是我尝试过的方法,但都失败了。
方法1:使用脚本处理程序
WKWebView接收JS消息的新方法是使用委托方法userContentController:didReceiveScriptMessage:,该方法由window.webkit.messageHandlers.myMsgHandler.postMessage('What's the meaning of life, native code?')从JS调用。这种方法的问题是,在执行本机委托方法期间,JS执
当我调试我的应用程序以找出为什么webview dowsn没有接收到我的消息时,我发现在我现有的webview (A)之上创建了另一个WkWebview (让我们称之为B)。因为我只引用A,所以我尝试使用它的内存地址直接在B上计算js。在lldb中这样做的正确方法是什么?
基于,我尝试过:settings set target.language swift e -- import WKWebview e -- let $webView = unsafeBitCast(0x13299e400, to:WKWebview.self)
为了调用webView.evaluateJavaScript,但