swift 在webview中加载本地JavaScript?

bbmckpt7  于 5个月前  发布在  Swift
关注(0)|答案(1)|浏览(63)

我正在使用Swift制作带有自己广告的移动的浏览器,我想运行脚本。我已经注入了JavaScript本地文件,但它在其他窗口中打开并覆盖了webView内容。是否可以在webView页面中运行JavaScript代码?不能在其他窗口中运行,只能在页面内容中运行。

hwazgwia

hwazgwia1#

使用WKWebView进行JavaScript方法调用:

**步骤1.**导入webkit类

目标C:#import <WebKit/WebKit.h>
Swift:import WebKit

**第二步.**创建WKWebView示例(可惜只能通过脚本完成)

Obj-C @property (strong, nonatomic) WKWebView *wkWebView;
Swift var wkWebView: WKWebView? = WKWebView()

**步骤3.**然后在viewDidLoad

目标C:

WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
    
    NSString *scriptSourceCode = @"your javascript code here";
    WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];

    WKUserContentController *controller = [[WKUserContentController alloc] init];
    [controller addUserScript:script];

    configuration.userContentController = controller;
    
    _wkWebView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:configuration];
    
    [self.view addSubview:_wkWebView];

字符串
雨燕:

let configuration = WKWebViewConfiguration()
    let controller = WKUserContentController()
    
    let scriptSourceCode = "your javascript code here"
    let script = WKUserScript(source: scriptSourceCode, injectionTime: WKUserScriptInjectionTime.AtDocumentStart, forMainFrameOnly: true)
    controller.addUserScript(script)

    configuration.userContentController = controller
    
    self.wkWebView = WKWebView(frame: self.view.frame, configuration: configuration)
    
    self.view.addSubview(self.wkWebView!)

步骤4wkWebView中加载HTML字符串(或loadRequest):

目标C:

[_wkWebView loadHTMLString:_desiredHTML baseURL:[[NSBundle mainBundle] bundleURL]];


雨燕:

self.wkWebView?.loadHTMLString(_desiredHTML, baseURL: NSBundle.mainBundle().bundleURL)

第五步.调用WKWebView中包含的JavaScript中的方法

目标C:

NSString *callMethod = [NSString stringWithFormat:@"existingMethodWithParam(%@)", stringParam];

    [_wkWebView evaluateJavaScript:callMethod
             completionHandler:^(id obj, NSError *error) {
                 
                 if (error)
                 {
                     NSLog(@"ERROR evaluating JavaScript - %@", error);
                 }
                 else 
                 {
                     NSLog(@"Returned value - %@", obj); //if the javascript method has a return type
                 }
             }];


雨燕:

let callMethod = "existingMethodWithParam()"
self.wkWebView?.evaluateJavaScript(callMethod) { obj, error in
    print(obj)
    print(error)
}

相关问题