2

我想调用一个 JavaScript 函数,例如:

- (void)alertMe:(NSString *)msg {
[[[UIAlertView alloc] initWithTitle:@"Alert" message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
}

function alertMe(msg) {
alert(msg);
}

如果 HTML 文件加载到 XCode 中的 UIWebView 上,我如何使用 XCode 调用它

4

3 回答 3

6

使用委托方法 UIWebView

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

为您的 javascript 函数实现查询字符串

于 2013-08-23T09:53:06.530 回答
4

您可以使用EasyJSWebView轻松实现Objective-CJavaScript. 更方便的方法是实现一个类,该类包含您JS将调用的所有方法,并使用您的 UIWebView 控制对象子类以 EasyJSWebView 作为参数来实例化该类。

例如:我创建了一个类JSInterface来保存我所有的原生 Obj-C 方法

我有一个自定义方法

- (void)initializeJSInterfaceForWebView:(EasyJSWebView *)webView {
    self.jsInterface.appDelegate = appDelegate;
    self.jsInterface.webView.delegate = self;
    [webView addJavascriptInterfaces:self.jsInterface WithName:@"nativeInterface"];
}

那将被初始化EasyJSWebView

我实例化

self.jsInterface = [JSInterface initWithView:self];
[self initializeJSInterfaceForWebView:self.webView];

例如,我们有一个本地Objective-C方法:

- (void) printLog:(NSString *)msg {
    NSLog(@"%@", msg);
}

JavaScript使用对象名称调用本机方法,nativeInterface如下所示:

nativeInterface.printLog("This is only a test.");
于 2016-03-03T08:04:20.017 回答
1

您可能希望为您的 JavaScript 函数 ei 实现查询字符串:

function getQueryString(){ 
var mySearch = window.location.search.substr(1).split("&");

     if (mySearch!="") 
     {
          for(var x=0;x<mySearch.length;x++) {
                // loop to all your query string here
          }

     }
}//end function

或者您可能还想使用该方法

[webView stringByEvaluatingJavaScriptFromString:(NSString*)]

您可以在其中调用本地 javascript,例如:

[webView stringByEvaluatingJavaScriptFromString:@"javascript:myJSFunction()"];

但是这个方法只能在 内调用webViewDidFinishLoad:(UIWebView *)webView和/或在webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType方法内调用时return必须是NO

于 2014-01-29T04:37:10.967 回答