admin管理员组文章数量:1410673
I'm making mobile browser with my own ads in Swift and I want to run script. I already inject JavaScript local file but it opens in other window and overrides webView content. Is it possible to run JavaScript code in webView page? Not in other window, only in page with page content.
I'm making mobile browser with my own ads in Swift and I want to run script. I already inject JavaScript local file but it opens in other window and overrides webView content. Is it possible to run JavaScript code in webView page? Not in other window, only in page with page content.
Share Improve this question edited Dec 22, 2023 at 8:02 stackich 5,3755 gold badges27 silver badges55 bronze badges asked Sep 15, 2015 at 9:15 user5305666user5305666 3-
Are you using a
UIWebView
orWKWebView
? I remend usingWKWebView
for using javascript methods AFTER the view has loaded. – Nishant Commented Sep 15, 2015 at 9:21 - I'm using UIWebView,thanks for advice – user5305666 Commented Sep 15, 2015 at 9:25
- you want to inject a .js file or you want to execute some javascript code? – jcesarmobile Commented Sep 15, 2015 at 9:46
1 Answer
Reset to default 5Using WKWebView
for javascript method call:
Step 1. Import class for webkit
Obj-C: #import <WebKit/WebKit.h>
Swift: import WebKit
Step 2. Create a WKWebView
instance (Unfortunately it can only be done programatically)
Obj-C @property (strong, nonatomic) WKWebView *wkWebView;
Swift var wkWebView: WKWebView? = WKWebView()
Step 3. Then in viewDidLoad
Obj-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];
Swift:
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!)
Step 4 Load a HTML string (or a loadRequest) in the wkWebView
:
Obj-C:
[_wkWebView loadHTMLString:_desiredHTML baseURL:[[NSBundle mainBundle] bundleURL]];
Swift:
self.wkWebView?.loadHTMLString(_desiredHTML, baseURL: NSBundle.mainBundle().bundleURL)
Step 5. Call a method which exists in the javascript included in the WKWebView
Obj-C:
NSString *callMethod = [NSString stringWithFormat:@"existingMethodWithParam(%@)", stringParam];
[_wkWebView evaluateJavaScript:callMethod
pletionHandler:^(id obj, NSError *error) {
if (error)
{
NSLog(@"ERROR evaluating JavaScript - %@", error);
}
else
{
NSLog(@"Returned value - %@", obj); //if the javascript method has a return type
}
}];
Swift:
let callMethod = "existingMethodWithParam()"
self.wkWebView?.evaluateJavaScript(callMethod) { obj, error in
print(obj)
print(error)
}
本文标签: iosLoad local javascript in webviewStack Overflow
版权声明:本文标题:ios - Load local javascript in webview? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744987910a2636203.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论