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的 ...
随机推荐
- Android ViewTreeObserver简介
Android ViewTreeObserver简介 一.结构 public final class ViewTreeObserver extends Object java.lang.Objec ...
- ASDL + WN725N 配置无线AP
1. ASDL 正常拨号上网 2. 安装TP-LINK无线客户端应用程序 打开之后选择模拟AP 如下图设置----应用 3. 本地连接----属性----高级 如下图设置 4. 宽带连接--- ...
- SoapUI入门
注:需要使用发布的webService接口 我们一般用的是impl接口调用,不大用得上soapUI.看到一份简历上写了使用soapUI做webService测试,想了解一下什么是soapUI soap ...
- List 接口以及实现类和相关类源码分析
List 接口以及实现类和相关类源码分析 List接口分析 接口描述 用户可以对列表进行随机的读取(get),插入(add),删除(remove),修改(set),也可批量增加(addAll),删除( ...
- uva 11107 Life Forms
题意:给你N个串,求一个串在大于等于N/2的模板串中连续出现.如果有多解按字典序最小输出. 白书模板题.二分答案+合并模板串成一个新串,扫秒新串的height数组. 考查后缀数组+LCP #inclu ...
- 【Java基础】Java网络编程基础知识
什么是网络编程 网络编程是通过使用套接字来达到进程间通信目的,那什么是套接字呢?其实套接字是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的 ...
- leetcode@ [126] Word Ladder II (BFS + 层次遍历 + DFS)
https://leetcode.com/problems/word-ladder-ii/ Given two words (beginWord and endWord), and a diction ...
- ubuntu源码安装R语言
下载后解压完,进入开始配置: ./configure --enable-R-shlib 报错: configure: error: con--with-readline=yes (default) a ...
- Android实例-录音与回放(播放MP3)(XE8+小米2)
结果: 1.增加ActionList中的Action时,需要跳到Master界面,不能在Android4Phonel界面下. 2.如果不打开权限的话,会提示“该设备不支持停止录音操作”(Record ...
- Android实例-退出程序(XE8+小米2)
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Var ...