在webview中加载本地javascript?

问题描述 投票:0回答:1

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

javascript ios iphone swift webview
1个回答
5
投票

使用
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)
    })]
© www.soinside.com 2019 - 2024. All rights reserved.