加载网页时执行javascript代码

  1. let mWebView = WKWebView.init(frame: self.view.bounds)
  2. self.view.addSubview(mWebView)
  3. //加载请求
  4. let request = NSURLRequest.init(URL: NSURL.init(string: "http://www.baidu.com/")!)
  5. mWebView.loadRequest(request)
  6.  
  7. //编写javascript代码,并在加载网页时执行
  8. let js1 = "var button = document.getElementsByTagName('button')[0];"
  9. let js2 = "button.parentNode.removeChild(button);"
  10. let js=js1+js2</span>
  11.  
  12. let script = WKUserScript(source: js, injectionTime: WKUserScriptInjectionTime.AtDocumentEnd, forMainFrameOnly: true)
  13. mWebView.configuration.userContentController.addUserScript(script)

我自己写了个简单的html网页,作为测试用,文件名为test

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>测试网页</title>
  5. <style type="text/css">
  6. body button{
  7. color: red;
  8. background-color: blue;
  9. width: 200px;
  10. }
  11. .list{
  12. background-color: #ffff00;
  13. }
  14. </style>
  15.  
  16. </head>
  17. <body>
  18. <br>
  19. <br>
  20. <br>
  21. <P>
  22.  
  23. </P>
  24. <ul >
  25. </ul>
  26. <br>
  27. <button onclick="window.webkit.messageHandlers.YX.postMessage('专注探索')">按钮1</button>
  28. <button>按钮2</button>
  29. <button onclick="window.webkit.messageHandlers.{YX}.postMessage(kkkkkkkkkk)">这按钮3</button>
  30.  
  31. </body>
  32. </html>

WKWebView获得网页传递的数据,和js进行交互

  1. import UIKit
  2. import WebKit
  3.  
  4. class ViewController: UIViewController ,WKScriptMessageHandler,WKUIDelegate,WKNavigationDelegate {
  5.  
  6. override func viewDidLoad() {
  7. super.viewDidLoad()
  8. //创建一个WKWebView,并添加到控制器的view中
  9. let mWebView = WKWebView.init(frame: self.view.bounds)
  10. self.view.addSubview(mWebView)
  11.  
  12. //加载请求
  13. let url1 = NSURL.fileURLWithPath("/Users/yinqixing/Documents/0102--自己编的网页/0102--自己编的网页Tests/test.html")
  14. // let url = NSBundle.mainBundle().URLForResource("test", withExtension: "html")
  15. let request = NSURLRequest.init(URL: url1)
  16. mWebView.loadRequest(request)
  17.  
  18. //编写javascript代码,并在加载网页时执行
  19. let js1 = "var button = document.getElementsByTagName('button')[1];"
  20. let js2 = "button.parentNode.removeChild(button);"
  21. let js=js1+js2
  22.  
  23. let script = WKUserScript(source: js, injectionTime: WKUserScriptInjectionTime.AtDocumentEnd, forMainFrameOnly: true)
  24. mWebView.configuration.userContentController.addUserScript(script)
  25.  
  26. mWebView.UIDelegate = self
  27. mWebView.navigationDelegate = self
  28.  
  29. //注意 控制器要遵守WKScriptMessageHandler这个协议
  30. //网页代码加入的交互代码: window.webkit.messageHandlers.YX.postMessage()
  31. mWebView.configuration.userContentController.addScriptMessageHandler(self, name: "YX")
  32.  
  33. }
  34. //实现WKScriptMessageHandler协议中的方法
  35. func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
  36.  
  37. print(message.body)
  38. //打印结果为 专注探索
  39.  
  40. }

WebKit笔记的更多相关文章

  1. WebKit资源加载和网络栈

    webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 WebKit资源加载 ...

  2. WebKit 渲染过程

    webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 Webkit渲染过程 ...

  3. Chromium多进程资源加载

    webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 多进程 资源的实际加 ...

  4. [webkit移动开发笔记]之如何去除android上a标签产生的边框(转)

    转载地址:http://www.cnblogs.com/PeunZhang/archive/2013/02/28/2907708.html 去年年底,做完最后一个项目就可以开开心心回家,可是在测试阶段 ...

  5. [webkit移动开发笔记]之如何去除android上a标签产生的边框

    去年年底,做完最后一个项目就可以开开心心回家,可是在测试阶段,发现了不少bug,为了不影响回家时间,加班加点也要解决这些问题,这里算是工作回忆,也算是工作的一点小总结. 在ios4+和android2 ...

  6. openerp学习笔记 webkit 打印

    1.webkit 打印需要安装的支持模块 请首先安装 Webkit 报表引擎(report_webkit),再安装 Webkit 报表的支持库(report_webkit_lib),该模块讲自动安装和 ...

  7. webkit技术内幕读书笔记 (四)

    资源缓存 资源缓存的目的是为了提高资源使用的效率,其基本思想是建立一个资源的缓存池,当需要请求资源的时候先去资源池查找是否有相应的资源,如果没有则向服务器发送请求,webkit收到资源后将其设置到该资 ...

  8. webkit技术内幕读书笔记 (二、三)

    可视区和网页 通常网页比屏幕的可视区面积要大,因此当网页内容在可视区中放不下时,一般浏览器会提供滚动条. 从URL到构建完DOM树的过程 当用户输入网页URL的时候,WebKit调用其资源加载器加载该 ...

  9. webkit技术内幕读书笔记 (一)

    本文部分摘录自互联网. Chromeium与Chrome Chromium是Google为发展自家的浏览器Google Chrome而打开的项目,所以Chromium相当于Google Chrome的 ...

随机推荐

  1. windows版本git的下载地址

    最后编辑时间 2016年09月01日13:13 首先需要下载msysgit,下载最新版本即可 https://git-for-windows.github.io/ 这个是源代码 https://git ...

  2. web.xml 配置的详解

    http://my.oschina.net/u/1383439/blog/224448 http://blog.csdn.net/guihaijinfen/article/details/836383 ...

  3. LR 常见问题总结

    问题1:Error: Two Way Communication Error:            Function two_way_comm_post_message/two_way_comm_p ...

  4. Java实现在访问者模式中使用反射

    集合类型在面向对象编程中很常用,这也带来一些代码相关的问题.比如,“怎么操作集合中不同类型的对象?” 一种做法就是遍历集合中的每个元素,然后根据它的类型而做具体的操作.这会很复杂,尤其当你不知道集合中 ...

  5. Java之DataInputStream和DataOutputStream-用流操作基本数据类型

    package FileDemo; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.Fi ...

  6. hdoj 2037 今年暑假不AC

    今年暑假不AC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  7. 高效使用Bitmaps(二) 后台加载Bitmap

    转载:http://my.oschina.net/rengwuxian/blog/183802 为什么要在后台加载Bitmap? 有没有过这种体验:你在Android手机上打开了一个带有含图片的Lis ...

  8. [一位菜鸟的COCOS-2D编程之路]精灵表单的制作以及简易动画的生成

    1.第一步:使用Zwoptex 制作精灵表单 2.制作的表单的名称为 cocos2Dpng,cocos2D.plist: 3.精灵的动画效果 主要分为五部分. // on "init&quo ...

  9. 用 C# 做人脸检测(EmguCV)

    用 C# 做人脸检测(EmguCV)   原发:bbs.csdn.net 作者:野比 (conmajia@gmail.com) 时间:May 2012 下载源码 准备工作 下载 EmguCV 傻瓜安装 ...

  10. tomcat 虚拟目录与显示目录中文件列表

    虚拟目录: 该方法推荐使用,比较简单. 在%tomcat%\conf\Catalina\localhost(该目录可能需要手工创建)下新建一个文件abc.xml,注意文件名中的abc就表示虚拟目录的名 ...