zoukankan      html  css  js  c++  java
  • 在UIWebView中间接调用网页中的javascript代码获得想要的值

    日记和一些废话:

    今天在使用webView加载网页后, 发现网页中的点击事件是用js代码实现的, 可是怎么点击都没有反应, 而且我主要是想获取到点击事件转到的url , 后来发现html中又这么一段代码: 

    document.addEventListener('WebViewJavascriptBridgeReady', function onBridgeReady(event)
    function openPage(pageUrl)  {
                                  if(bridge)
                                 {
                                   bridge.send(pageUrl);
                                  }
                                 }
     <li><a     onclick="javascript:openPage('http://.....

    看样子点击事件就跟这几段有关了, 那就从这里入手

    搜索了点资料, 发现原来UIWebView有个神奇的方法:

    stringByEvaluatingJavaScriptFromString

    果断搞起

    首先想要获取网页内数据的变化需要UIWebViewDelegate协议的相关方法

    比如说我想知道原网页的js函数中参数, 可以像js中注入一段代码获取这个参数, 并加上一个前缀方便识别, 我加上了'bbb'

    - (void)webViewDidFinishLoad:(UIWebView *)webView {
        // 注入js代码改变网页的url
        [webView stringByEvaluatingJavaScriptFromString:@"function openPage(pageUrl){ document.location.href = 'bbb' + pageUrl;}"];
    }

    现在我给点击事件跳转的url加上了自己的标识, 现在就可以根据这个标识找到我想要的url了, webView在网页发生重定向时会调用下面这个方法

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        // 1. 截取重定向的url字符串
        NSString *url = [[request URL] absoluteString];
        // 2. 判断js注入的标识符
        if ([url hasPrefix:@"bbb"]) {
            // 3. 将标示符后的字符串截取出来, 就是我们想要的url
            NSString *str = [url substringFromIndex:3];
            //因为我只想要获取到这个url, 不需要发生网页跳转, 所以return NO
            return NO;
        }
        return YES;
    }

    好了我拿到这个网址了

  • 相关阅读:
    k8s的基本概念与基本功能
    STM32F030看门狗
    STM32F030低功耗
    STM32开发脱坑记
    ubuntu下安装wine并运行source insight
    Linux下使用Eclipse搭建ARM开发环境
    linux下的find文件查找命令与grep文件内容查找命令(转)
    STM32F030 BootLoader与应用程序的跳转设置
    MCU开发之MDK-ARM总结
    IIC协议总结
  • 原文地址:https://www.cnblogs.com/sexyBoBo/p/3811039.html
Copyright © 2011-2022 走看看