UIWebView没有调用我的Javascript函数

时间:2017-04-09 15:32:42

标签: javascript html ios objective-c uiwebview

我知道这个问题已经多次发布了。但他们都没有帮助我解决我的问题。请在downvote之前考虑阅读整个问题: - )

所以,因为我有以下代码行

- (void)viewDidLoad {
    [super viewDidLoad];
    NSURL * url = [NSURL URLWithString: @"https://www.w3schools.com/code/tryit.asp?filename=FEGU9IV4SAK8"];

    NSURLRequest * request = [NSURLRequest requestWithURL:url];

    self.webView.delegate = self;
    [self.webView loadRequest:request];
}

#pragma mark - UIWebView Delegates

- (void) webViewDidFinishLoad:(UIWebView *)webView {

    NSString * jsString = [NSString stringWithFormat:@"test()"];
    [webView stringByEvaluatingJavaScriptFromString:jsString] ;


//This code is working. Able to prompt "Hello"    
//     jsString = [NSString stringWithFormat:@"alert('Hello');"];
//    [webView stringByEvaluatingJavaScriptFromString:jsString] ;
}

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

   // ignore legit webview requests so they load normally
    if (![request.URL.scheme isEqualToString:kSchemeName]) {
        return YES;
    }


    // look at the actionType and do whatever you want here
    if ([actionType isEqualToString:kJSActionForPay]) {

        //Call objective-c method - Success 
    }

    // make sure to return NO so that your webview doesn't try to load your made-up URL
    return NO;
}

所以,我已经尝试/理解了。

[1]仅在加载Web视图后调用JS函数。 (使用过的代表)

[2]能够从

提示“你好”

[webView stringByEvaluatingJavaScriptFromString:@"alert('Hello')"] ;

[3]在HTML方面进行的更改

<!DOCTYPE html>
<html>
<head>
  <title>Page Title</title>
</head>
<body>
<h1 id="id1">My Heading 1</h1>
<button type="button" 
onclick="document.getElementById('id1').style.color = 'red'">
Click Me!</button>
</body>
     <script> 
      function test() {
        alert("Started");
     }
     </script>
</html>

请帮助找出我在HTML方面缺少的内容?还是在我的家乡Objc?

编辑1 : 正如@Andy建议的那样,我从本地加载了html。然后我可以调用JS函数“test()”

1 个答案:

答案 0 :(得分:0)

您不应该使用w3schools编辑器作为项目的源html。您尝试访问的url不仅包含您的内容,还包含w3schools使用的脚本。相反,您应该将您的html文件放在您自己的服务器上或项目中的.html文件中。然后,您可以调用test()方法。