Как переназначить JSContext в UIWebView в WKScriptMessage для WKWebview - PullRequest
0 голосов
/ 23 октября 2019

Я хочу преобразовать библиотеку UIWebView для использования WkWebview. Оставшаяся часть - отключение JSContext, потому что valueForKeyPath больше не работает. Итак, как мне переписать что-то вроде следующего, чтобы использовать WKScriptMessage, как предлагает другая ссылка SO? (быстрый ответ или ответ ObjC в порядке) Как получить JSContext из 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);"];

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Я преобразовал UIWebView в WKWebView для редактора. Я создал форк из этой Github Link . Ссылку на мой демо можно найти здесь .

0 голосов
/ 24 октября 2019

Хорошо, я понял это. См. PR https://github.com/nnhubbard/ZSSRichTextEditor/pull/243

В основном вы вводите JavaScript, чтобы запустить слушателей. Ключевым моментом здесь является передача функции, которая вызывает webkit с использованием postMessage и использование того же имени, в моем случае '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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...