如何在 IOS 中集成 Javascript
Posted
技术标签:
【中文标题】如何在 IOS 中集成 Javascript【英文标题】:How to integrate Javascript in IOS 【发布时间】:2016-07-26 13:57:46 【问题描述】:如何在objective c中集成javascript? 这是我的 JavaScript 代码:
<!DOCTYPE html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" src="https://maps.micello.com/webmap/v0/micellomap.js"></script>
<script type="text/javascript">
micello.maps.init("ZccEicxOED0xicnQFrnkK7uzXJJUog",mapInit);
function mapInit(strMapID)
alert("Hello World!"+strMapID);
var mapControl = new micello.maps.MapControl('mapElement');
var mapDataObject = mapControl.getMapData();
mapDataObject.loadCommunity(strMapID);
</script>
<style type="text/css">
html, body height: 100%; width: 100%; margin: 0; overflow: hidden;
#mapElement width:100%; height:100%;
</style>
</head>
<body>
<div id="mapElement"></div>
</body>
</html>
我在 WebView 的 Objective-C 中使用此 JavaScript 代码。这是我的 Objective-C 代码:
- (void)viewDidLoad
NSLog(@"strMapID = %@",strMapID);
NSString *path;
NSBundle *thisBundle = [NSBundle mainBundle];
path = [thisBundle pathForResource:@"SomeHTML" ofType:@"html"];
NSURL *instructionsURL = [NSURL fileURLWithPath:path];
[webView loadRequest:[NSURLRequest requestWithURL:instructionsURL]];
WebView 委托方法:
-(void)webViewDidStartLoad:(UIWebView *)webView
NSLog(@"start");
-(void)webViewDidFinishLoad:(UIWebView *)webView1
NSLog(@"finish");
[webView1 stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"mapInit(%@)",strMapID]];
//[webView stringByEvaluatingJavaScriptFromString:@"mapInit()"];
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
NSLog(@"Error for WEBVIEW: %@", [error description]);
但是在这里,JavaScript alert("Hello World!"+strMapID);
调用了两次。第一次显示正确的 MapID,但第二次显示未定义。
我不知道为什么 alert 会调用 2 次。因此,它在我的 webview 中给了我 500 错误。
请指导我解决我的问题。
提前致谢。
【问题讨论】:
这有帮助吗:***.com/questions/38198083/…?这不是我的专业领域。 谢谢@0aslam0,但这个链接对我没有帮助。 我想知道如何将此html代码转换为javascript函数。在此我想通过目标 c 在 mapInit(n) 方法中传递参数。 【参考方案1】:首先我们需要在我调用 stringByEvaluatingJavaScriptFromString
的委托方法中设置 UIWebView 然后 UIWebView- (void)webViewDidFinishLoad:(UIWebView *)webView
CGFloat height = [[webview stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
CGRect frame = webview.frame;
frame.size.height = height;
webview.frame = frame;
//If you want to set font size and body of HTML
int fontSize = 80;
NSString *jsString = [[NSString alloc] initWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '%d%%'", fontSize];
[webview stringByEvaluatingJavaScriptFromString:jsString];
NSString *jsWebViewFontFamilyString = [[NSString alloc] initWithFormat:@"document.getElementsByTagName('body')[0].style.fontFamily = 'Helvetica'"];
[webview stringByEvaluatingJavaScriptFromString:jsWebViewFontFamilyString];
//For passing parameter from Objective c to JavaScript
NSString *strMapId = @"1367"; //Your ID
NSString *jsCallBack = [NSString stringWithFormat:@"mapInit('%@')",strMapId];
[webView stringByEvaluatingJavaScriptFromString:jsCallBack];
Passing Objective C variable to JavaScript
如果你想导航或做任何事情
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
switch (navigationType)
case UIWebViewNavigationTypeLinkClicked:
//When User tapped a link.
break;
case UIWebViewNavigationTypeOther:
//Some other action occurred.
break;
case UIWebViewNavigationTypeFormSubmitted:
//user submitted a form.
break;
case UIWebViewNavigationTypeBackForward:
//User tapped the back or forward button. .
break;
case UIWebViewNavigationTypeReload:
//User tapped the reload button.
break;
case UIWebViewNavigationTypeFormResubmitted
//User resubmitted a form. .
break;
return YES;
【讨论】:
对不起@user3182143,但我想在一个js文件中实现我的JavaScript代码,我想在目标c中传递参数mapInit(n)
方法。你明白我的问题吗?
***.com/questions/9826792/…
不明白。你能告诉我如何在我的场景中使用这个链接答案吗?
N 是什么意思?为什么要传递 N?
我的答案和你的 webview didFininshLoad 答案是正确的。我认为你可能在你的 java 脚本代码中弄错了以上是关于如何在 IOS 中集成 Javascript的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SLRequest 在 iOS 6 中集成 Facebook?
如何在 iOS 的自定义 ViewController 中集成 Firebase 通知?