WebKit笔记
加载网页时执行javascript代码
- let mWebView = WKWebView.init(frame: self.view.bounds)
- self.view.addSubview(mWebView)
- //加载请求
- let request = NSURLRequest.init(URL: NSURL.init(string: "http://www.baidu.com/")!)
- mWebView.loadRequest(request)
- //编写javascript代码,并在加载网页时执行
- let js1 = "var button = document.getElementsByTagName('button')[0];"
- let js2 = "button.parentNode.removeChild(button);"
- let js=js1+js2</span>
- let script = WKUserScript(source: js, injectionTime: WKUserScriptInjectionTime.AtDocumentEnd, forMainFrameOnly: true)
- mWebView.configuration.userContentController.addUserScript(script)
我自己写了个简单的html网页,作为测试用,文件名为test
- <html>
- <head>
- <meta charset="utf-8">
- <title>测试网页</title>
- <style type="text/css">
- body button{
- color: red;
- background-color: blue;
- width: 200px;
- }
- .list{
- background-color: #ffff00;
- }
- </style>
- </head>
- <body>
- <br>
- <br>
- <br>
- <P>
- </P>
- <ul >
- </ul>
- <br>
- <button onclick="window.webkit.messageHandlers.YX.postMessage('专注探索')">按钮1</button>
- <button>按钮2</button>
- <button onclick="window.webkit.messageHandlers.{YX}.postMessage(kkkkkkkkkk)">这按钮3</button>
- </body>
- </html>
WKWebView获得网页传递的数据,和js进行交互
- import UIKit
- import WebKit
- class ViewController: UIViewController ,WKScriptMessageHandler,WKUIDelegate,WKNavigationDelegate {
- override func viewDidLoad() {
- super.viewDidLoad()
- //创建一个WKWebView,并添加到控制器的view中
- let mWebView = WKWebView.init(frame: self.view.bounds)
- self.view.addSubview(mWebView)
- //加载请求
- let url1 = NSURL.fileURLWithPath("/Users/yinqixing/Documents/0102--自己编的网页/0102--自己编的网页Tests/test.html")
- // let url = NSBundle.mainBundle().URLForResource("test", withExtension: "html")
- let request = NSURLRequest.init(URL: url1)
- mWebView.loadRequest(request)
- //编写javascript代码,并在加载网页时执行
- let js1 = "var button = document.getElementsByTagName('button')[1];"
- let js2 = "button.parentNode.removeChild(button);"
- let js=js1+js2
- let script = WKUserScript(source: js, injectionTime: WKUserScriptInjectionTime.AtDocumentEnd, forMainFrameOnly: true)
- mWebView.configuration.userContentController.addUserScript(script)
- mWebView.UIDelegate = self
- mWebView.navigationDelegate = self
- //注意 控制器要遵守WKScriptMessageHandler这个协议
- //网页代码加入的交互代码: window.webkit.messageHandlers.YX.postMessage()
- mWebView.configuration.userContentController.addScriptMessageHandler(self, name: "YX")
- }
- //实现WKScriptMessageHandler协议中的方法
- func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
- print(message.body)
- //打印结果为 专注探索
- }
WebKit笔记的更多相关文章
- WebKit资源加载和网络栈
webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 WebKit资源加载 ...
- WebKit 渲染过程
webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 Webkit渲染过程 ...
- Chromium多进程资源加载
webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 多进程 资源的实际加 ...
- [webkit移动开发笔记]之如何去除android上a标签产生的边框(转)
转载地址:http://www.cnblogs.com/PeunZhang/archive/2013/02/28/2907708.html 去年年底,做完最后一个项目就可以开开心心回家,可是在测试阶段 ...
- [webkit移动开发笔记]之如何去除android上a标签产生的边框
去年年底,做完最后一个项目就可以开开心心回家,可是在测试阶段,发现了不少bug,为了不影响回家时间,加班加点也要解决这些问题,这里算是工作回忆,也算是工作的一点小总结. 在ios4+和android2 ...
- openerp学习笔记 webkit 打印
1.webkit 打印需要安装的支持模块 请首先安装 Webkit 报表引擎(report_webkit),再安装 Webkit 报表的支持库(report_webkit_lib),该模块讲自动安装和 ...
- webkit技术内幕读书笔记 (四)
资源缓存 资源缓存的目的是为了提高资源使用的效率,其基本思想是建立一个资源的缓存池,当需要请求资源的时候先去资源池查找是否有相应的资源,如果没有则向服务器发送请求,webkit收到资源后将其设置到该资 ...
- webkit技术内幕读书笔记 (二、三)
可视区和网页 通常网页比屏幕的可视区面积要大,因此当网页内容在可视区中放不下时,一般浏览器会提供滚动条. 从URL到构建完DOM树的过程 当用户输入网页URL的时候,WebKit调用其资源加载器加载该 ...
- webkit技术内幕读书笔记 (一)
本文部分摘录自互联网. Chromeium与Chrome Chromium是Google为发展自家的浏览器Google Chrome而打开的项目,所以Chromium相当于Google Chrome的 ...
随机推荐
- windows版本git的下载地址
最后编辑时间 2016年09月01日13:13 首先需要下载msysgit,下载最新版本即可 https://git-for-windows.github.io/ 这个是源代码 https://git ...
- web.xml 配置的详解
http://my.oschina.net/u/1383439/blog/224448 http://blog.csdn.net/guihaijinfen/article/details/836383 ...
- LR 常见问题总结
问题1:Error: Two Way Communication Error: Function two_way_comm_post_message/two_way_comm_p ...
- Java实现在访问者模式中使用反射
集合类型在面向对象编程中很常用,这也带来一些代码相关的问题.比如,“怎么操作集合中不同类型的对象?” 一种做法就是遍历集合中的每个元素,然后根据它的类型而做具体的操作.这会很复杂,尤其当你不知道集合中 ...
- Java之DataInputStream和DataOutputStream-用流操作基本数据类型
package FileDemo; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.Fi ...
- hdoj 2037 今年暑假不AC
今年暑假不AC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- 高效使用Bitmaps(二) 后台加载Bitmap
转载:http://my.oschina.net/rengwuxian/blog/183802 为什么要在后台加载Bitmap? 有没有过这种体验:你在Android手机上打开了一个带有含图片的Lis ...
- [一位菜鸟的COCOS-2D编程之路]精灵表单的制作以及简易动画的生成
1.第一步:使用Zwoptex 制作精灵表单 2.制作的表单的名称为 cocos2Dpng,cocos2D.plist: 3.精灵的动画效果 主要分为五部分. // on "init&quo ...
- 用 C# 做人脸检测(EmguCV)
用 C# 做人脸检测(EmguCV) 原发:bbs.csdn.net 作者:野比 (conmajia@gmail.com) 时间:May 2012 下载源码 准备工作 下载 EmguCV 傻瓜安装 ...
- tomcat 虚拟目录与显示目录中文件列表
虚拟目录: 该方法推荐使用,比较简单. 在%tomcat%\conf\Catalina\localhost(该目录可能需要手工创建)下新建一个文件abc.xml,注意文件名中的abc就表示虚拟目录的名 ...