iOS UIWebView Javascript - 插入数据 - 接收回调?

Posted

技术标签:

【中文标题】iOS UIWebView Javascript - 插入数据 - 接收回调?【英文标题】:iOS UIWebView Javascript - insert data -receive callbacks? 【发布时间】:2011-10-07 00:18:57 【问题描述】:

我有一个网页。我有一个 javascript 文件,它可以做很多事情。在应用程序中,我有一个 NSString ,其中包含一些需要在 javascript 文件中处理的关键数据。如何将我的字符串值放入我的 html 中的某个位置,以便我的 javascript 可以读取它?

此外,当执行操作(如按下按钮)时,javascript 会产生某些数据,我如何从 webview/javascript 中检索数据以便将其存储在应用程序中?

【问题讨论】:

【参考方案1】:

你可以调用一个javascript方法并使用this传递值

NSString *selectedValue = [webViewInstance stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"getAndReturnRadioValue(%d)", questionCounterIntValue]];

但要从 javascript 中触发,您需要使用解决方法,

实现以下 webViewDelegate 方法

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

    NSLog(@"passed data from web view : %@",[[request URL] query]);

    if([[[request URL] query] isEqualToString:@"clickedOnLineNo"])
    
        //Do your action here    
    

你必须通过你的 javascript 方法导航到一个虚假的 URL,例如,

window.location = "someLink://yourApp/form_Submitted:param1:param2:param3";

点击按钮或您需要的操作。

你可以看看我对这个问题的回答 Submit a form in UIWebView

【讨论】:

您能否进一步详细说明如何从 javascript 获取数据?例如,如果您单击 html 中的按钮,它将触发 javascript 函数。该函数具有我需要的返回值。我如何获得该返回值? 正如我在答案中提到的,从您的 JS 函数导航到 URL - 它会触发委托方法。【参考方案2】:
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script

听起来正是您需要的方法。例如,如果需要与 JavaScript 交互的输入和输出可以通过单个方法完成,则可以将值传递给 JavaScript 并使用以下代码获取结果:

NSString* jsCode = [NSString stringWithFormat:@"doSomething('%@')", dataToPass];
NSString* resultFromJavaScript = [webView stringByEvaluatingJavaScriptFromString:jsCode];

【讨论】:

我错过了 ' ' 周围的 %@... Uff,1 小时后!谢谢【参考方案3】:

您好,我们可以将目标 c 的数据发送到 javascript,并且可以轻松地从 javascript 回调

Objective-C --> javaScript

在 Objective-C 类中

NSData *locationCountData = [NSJSONSerialization dataWithJSONObject:locationCount   options:NSJSONWritingPrettyPrinted error:nil];
NSString *locationCountString = [[NSString alloc] initWithData:locationCountData encoding:NSUTF8StringEncoding];

NSData *locationCountData = [NSJSONSerialization dataWithJSONObject:locationCount options:NSJSONWritingPrettyPrinted error:nil];
NSString *locationCountString = [[NSString alloc] initWithData:locationCountData encoding:NSUTF8StringEncoding];

NSString *str = [NSString   stringWithFormat:@"testFunction(%@,%@)",locationCountString, locationsListString];
[self.myWebView stringByEvaluatingJavaScriptFromString: str];

在 JavaScript 文件中

<script type="text/javascript">
function testFunction(locationCount,locationList)

    alert(locationCount + locationList);

</Script>

【讨论】:

以上是关于iOS UIWebView Javascript - 插入数据 - 接收回调?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIWebView 加载的 iframe 中注入 javascript - iOS

iOS 从 UIWebView 检索 javascript 变量

如何在 iOS 中将 javascript 附加到 UIWebView 中?

iOS:在 UIWebview 中使用 javascript 调用 obj-c 方法

iOS - 通过 JavaScript 获取我在 UIWebView 中单击的图像的 URL

如何在 iOS 7 的 UIWebView 中从 JavaScript 调用 Objective-C?