如何在iOS中调用Javascript方法?

如何在iOS中调用Javascript方法?,javascript,html,ios,webview,Javascript,Html,Ios,Webview,1。这个问题的答案是什么? 答案1 答案2 答案3 答案4 2。这个问题的答案是什么? 答案1 答案2 答案3 答案4 3。这个问题的答案是什么? 答案1 答案2 答案3 答案4 4。这个问题的答案是什么? 答案1 答案2 答案3 答案4 5。这个问题的答案是什么? 答案1 答案2 答案3 答案4 6。这个问题的答案是什么? 答案1 答案2 答案3 答案4 7。这个问题的答案是什么? 答案1 答案2 答案3 答案4 8。这个问题的答案是什么? 答案1 答案2 答案3


1。这个问题的答案是什么?

    答案1
    答案2
    答案3
    答案4

2。这个问题的答案是什么?

    答案1
    答案2
    答案3
    答案4

3。这个问题的答案是什么?

    答案1
    答案2
    答案3
    答案4

4。这个问题的答案是什么?

    答案1
    答案2
    答案3
    答案4

5。这个问题的答案是什么?

    答案1
    答案2
    答案3
    答案4

6。这个问题的答案是什么?

    答案1
    答案2
    答案3
    答案4

7。这个问题的答案是什么?

    答案1
    答案2
    答案3
    答案4

8。这个问题的答案是什么?

    答案1
    答案2
    答案3
    答案4

9。这个问题的答案是什么?

    答案1
    答案2
    答案3
    答案4

10。这个问题的答案是什么?

    答案1
    答案2
    答案3
    答案4

让我看看答案! 问题1:正确答案是答案1

问题2:正确答案是答案2

问题3:正确答案是答案3

问题4:正确答案是答案4

问题5:正确答案是答案1

问题6:正确答案是答案2

问题7:正确答案是答案3

问题8:正确答案是答案4

问题9:正确答案是答案1

问题10:正确答案是答案2

你回答得很好


请检查下面的代码,我已经在我的系统中进行了测试

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"File" ofType:@"html"];
    NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
    [self.webView loadHTMLString:htmlString baseURL:nil];

}
单击单选按钮后检查html结果的按钮操作方法-

- (IBAction)action:(id)sender {

    NSString* javaScriptString = @"document.querySelector('input[name=\"sex\"]:checked').value;";
    NSLog(@"%@",  [self.webView stringByEvaluatingJavaScriptFromString: javaScriptString]);
}
Html文件-

<!DOCTYPE html>
<html>
    <body>

        <form action="">
            <input type="radio" name="sex" value="male">Male<br>
            <input type="radio" name="sex" value="female">Female
        </form>

    </body>
</html>

男性
女性
您必须在JavaScript中创建一个全局变量来存储answer的值。
您的函数myFunction()是在webview加载之后调用的,当用户当时被选中时,没有调用任何函数。因此,您必须在一段时间内快速调用函数并检查它代码中的值是多少,这是事情发生的顺序:

  • 您可以在
    viewDidload
  • 您的
    webview
    已完成加载。因此您选择了值。但此时,您没有选择任何内容
  • 当您选择一个项目时,您没有做任何事情来告诉iOS您选择了一个项目
  • 因此,我建议使用
    WKWebview
    ,使用JS代码很好。

  • 在js代码中,添加要提交的按钮。 然后在按钮动作功能中

    function submit () {
        var message = //here get all your selected items
        window.webkit.messageHandlers.observe.postMessage(message);
     }
    
  • 在ViewController中,创建
    WKUserContentController
    以处理通知

    WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc]init];
    WKUserContentController *controller = [[WKUserContentController alloc]
                                       init];
    [controller addScriptMessageHandler:self name:@"observe"];
     configuration.userContentController = controller;
    _webView = [[WKWebView alloc] initWithFrame:self.view.frame
                              configuration:configuration];
    
  • 在委托方法中,处理js事件

    -(void)userContentController:(WKUserContentController *)userContentController
      didReceiveScriptMessage:(WKScriptMessage *)message {
    //message.body
    }
    
  • 更新整个项目

    #import <WebKit/WebKit.h>
    @interface ViewController ()<WKScriptMessageHandler>
    
    @property (strong, nonatomic) WKWebView  * webview;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        NSString *path;
        NSBundle *thisBundle = [NSBundle mainBundle];
        path = [thisBundle pathForResource:@"Untitled" ofType:@"html"];
        NSURL *instructionsURL = [NSURL fileURLWithPath:path];
    
        WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc]init];
        WKUserContentController *controller = [[WKUserContentController alloc]
                                           init];
        [controller addScriptMessageHandler:self name:@"observe"];
        configuration.userContentController = controller;
        _webview = [[WKWebView alloc] initWithFrame:self.view.frame
                                  configuration:configuration];
        [_webview loadRequest:[NSURLRequest requestWithURL:instructionsURL]];
        [self.view addSubview:self.webview];
    }
    
    -(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
        NSLog(@"%@",message.body);
    }
    
    #导入
    @界面视图控制器()
    @属性(强,非原子)WKWebView*webview;
    @结束
    @实现视图控制器
    -(无效)viewDidLoad{
    NSString*路径;
    NSBundle*thisBundle=[NSBundle mainBundle];
    path=[thisBundle pathForResource:@“Untitled”of type:@“html”];
    NSURL*指令URL=[NSURL fileURLWithPath:path];
    WKWebViewConfiguration*配置=[[WKWebViewConfiguration alloc]init];
    WKUserContentController*控制器=[[WKUserContentController alloc]
    初始化];
    [控制器addScriptMessageHandler:自身名称:@“观察”];
    configuration.userContentController=控制器;
    _webview=[[WKWebView alloc]initWithFrame:self.view.frame
    配置:配置];
    [_WebViewLoadRequest:[nsurlRequestRequestWithURL:instructionsURL]];
    [self.view addSubview:self.webview];
    }
    -(void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessa)
    
    <html>
    <head>
    <script type="text/javascript">
    function getFirstSelect(){
        var rates = document.getElementsByName('q1');
        var rate_value;
        for(var i = 0; i < rates.length; i++){
            if(rates[i].checked){
                rate_value = rates[i].value;
                break;
            }
        }
        window.webkit.messageHandlers.observe.postMessage(rate_value);
    }
    </script>
    
    <link rel="stylesheet" type="text/css" href="style.css" />
    </head>
    <body>
    <p class="question">1. What is the answer to this question?</p>
    
    <ul class="answers">
    <input type="radio" name="q1" value="a" id="q1a"><label for="q1a">Answer 1</label><br/>
    <input type="radio" name="q1" value="b" id="q1b"><label for="q1b">Answer 2</label><br/>
    <input type="radio" name="q1" value="c" id="q1c"><label for="q1c">Answer 3</label><br/>
    <input type="radio" name="q1" value="d" id="q1d"><label for="q1d">Answer 4</label><br/>
    </ul>
    
    <div id="Submit">
         <button onclick="getFirstSelect()">Submit</button>
    </div>
    
    </body>
    </html>
    
     - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    {
     if ([[[request URL] absoluteString] hasPrefix:@"ios:"])
     {
        // Call the given selector
        [self performSelector:@selector(webToNativeCall)];
        return NO;
     }
     return YES;
    }
    
    - (void)webToNativeCall
    {
     NSString *returnvalue =  [self.webview stringByEvaluatingJavaScriptFromString:@"returnVal()"];
     NSLog(@"returnvalue == %@",returnvalue);
    }
    
    function getData ()
    {
       window.location  = 'ios:webToNativeCall';
    }
    function returnVal(){
      return values;
    }