如何将 UIWebView 中的 JSContext 重新用于 WKWebview 的 WKScriptMessage
How do I repurpose JSContext in UIWebView to WKScriptMessage for WKWebview
我想将 UIWebView 库转换为使用 WkWebview。剩下的部分是关闭 JSContext,因为 valueForKeyPath
不再起作用。那么我该如何重写类似下面的内容来使用 WKScriptMessage 作为另一个 SO link 建议的呢? (swift 或 ObjC 答案很好)How to get JSContext from WKWebView
JSContext *ctx = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
ctx[@"contentPasteCallback"] = ^(JSValue *msg) {
__weak typeof(weakSelf) StrongSelf = weakSelf;
StrongSelf.editorPaste = YES;
};
[ctx evaluateScript:@"document.getElementById('zss_editor_content').addEventListener('paste', contentPasteCallback, false);"];
我已将编辑器的 UIWebView
转换为 WKWebView
。我已经从这个 Github Link. The link to my demo can be found here.
创建了一个分支
好的,我明白了。查看公关 https://github.com/nnhubbard/ZSSRichTextEditor/pull/243
基本上你注入 javascript 来启动监听器。这里的关键是传递使用 postMessage
调用 webkit 的函数并使用相同的名称,在我的例子中 'jsm'
与创建 WKUserContentController
对象时设置的名称相同
NSString *pasteListener = @"document.getElementById('zss_editor_content').addEventListener('paste', function() {window.webkit.messageHandlers.jsm.postMessage('paste');});";
[self.editorView evaluateJavaScript:pasteListener completionHandler:^(NSString *result, NSError *error) {
if (error != NULL) {
NSLog(@"%@", error);
}
}];
然后您在 userContentController: didReceiveScript
委托方法中监听来自 WKScriptMessageHandler
的响应
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
NSString *messageString = (NSString *)message.body;
if ([messageString isEqualToString:@"paste"]) {
self.editorPaste = YES;
}
我想将 UIWebView 库转换为使用 WkWebview。剩下的部分是关闭 JSContext,因为 valueForKeyPath
不再起作用。那么我该如何重写类似下面的内容来使用 WKScriptMessage 作为另一个 SO link 建议的呢? (swift 或 ObjC 答案很好)How to get JSContext from WKWebView
JSContext *ctx = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
ctx[@"contentPasteCallback"] = ^(JSValue *msg) {
__weak typeof(weakSelf) StrongSelf = weakSelf;
StrongSelf.editorPaste = YES;
};
[ctx evaluateScript:@"document.getElementById('zss_editor_content').addEventListener('paste', contentPasteCallback, false);"];
我已将编辑器的 UIWebView
转换为 WKWebView
。我已经从这个 Github Link. The link to my demo can be found here.
好的,我明白了。查看公关 https://github.com/nnhubbard/ZSSRichTextEditor/pull/243
基本上你注入 javascript 来启动监听器。这里的关键是传递使用 postMessage
调用 webkit 的函数并使用相同的名称,在我的例子中 'jsm'
与创建 WKUserContentController
对象时设置的名称相同
NSString *pasteListener = @"document.getElementById('zss_editor_content').addEventListener('paste', function() {window.webkit.messageHandlers.jsm.postMessage('paste');});";
[self.editorView evaluateJavaScript:pasteListener completionHandler:^(NSString *result, NSError *error) {
if (error != NULL) {
NSLog(@"%@", error);
}
}];
然后您在 userContentController: didReceiveScript
委托方法中监听来自 WKScriptMessageHandler
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
NSString *messageString = (NSString *)message.body;
if ([messageString isEqualToString:@"paste"]) {
self.editorPaste = YES;
}