如何在 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的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中集成 Chromecast API?

如何使用 SLRequest 在 iOS 6 中集成 Facebook?

如何在IOS SDK中集成多个卖家的paypal?

如何在 iOS 的自定义 ViewController 中集成 Firebase 通知?

如何在 iOS Objective-C 中集成“使用 Apple 登录”流程?

如何在 iOS 设备的 Flutter 中集成 Razorpay Payment