在 webview 中加载本地 javascript?

Posted

技术标签:

【中文标题】在 webview 中加载本地 javascript?【英文标题】:Load local javascript in webview? 【发布时间】:2015-09-15 09:15:28 【问题描述】:

我正在用自己的广告快速制作移动浏览器,我想运行脚本。我已经注入了 javascript 本地文件,但它在其他窗口中打开并覆盖了 webview 内容。是否可以在 webview 页面中运行 javascript 代码?不在其他窗口中,仅在具有页面内容的页面中。希望你能得到它

【问题讨论】:

您使用的是UIWebView 还是WKWebView?我建议在视图加载后使用 WKWebView 来使用 javascript 方法。 我正在使用 UIWebView,谢谢您的建议 你想注入一个.js文件或者你想执行一些javascript代码? 【参考方案1】:

使用WKWebView进行javascript方法调用:

第 1 步。 为 webkit 导入类

Obj-C:#import <WebKit/WebKit.h> 斯威夫特:import WebKit

第 2 步。 创建一个 WKWebView 实例(不幸的是,它只能以编程方式完成)

Obj-C @property (strong, nonatomic) WKWebView *wkWebView;

斯威夫特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!)

第 4 步wkWebView 中加载 html 字符串(或 loadRequest):

对象-C:

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

斯威夫特:

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

第 5 步。调用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 = String(format: "existingMethodWithParam(%@)", stringParam)

    [self.wkWebView?.evaluateJavaScript(callMethod, completionHandler:  (obj, error) -> Void in

        println(obj)
        println(error)
    )]

【讨论】:

我必须在哪里插入脚本?在这里:“existingMethodWithParam(%@)”? @CDDsw:例如,当你想调用 js 方法时,在某些按钮操作上。或者你想在 webview 加载时调用那个方法吗? 我想在 viewDidLoad 时加载带有 webview 内容的 js,而不是在其他窗口中。我已经有了这个功能,但我想知道如何用 webview 内容运行 js。我正在制作广告来的浏览器页面加载时退出,例如 adsense 广告,或者想知道是否有可能? 我已编辑 第 3 步。它现在接受将在 DocumentStart 处执行的 js 脚本代码。希望这会有所帮助

以上是关于在 webview 中加载本地 javascript?的主要内容,如果未能解决你的问题,请参考以下文章

NativeScript WebView 在 src 文档中加载本地资源

在 WebView 中加载页面之前,用本地 Android 资源替换 HTML 文档的图像

如何在 Android WebView 中加载本地图像

在webview android中加载本地html文件

使用 WebVIew2 (Windows) 在当前目录中加载本地 HTML 文件

Android-WebView中加载本地html的方法