加载网页时执行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笔记的更多相关文章

  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. jsp、js、html等

    1.一个button标签怎么触发事件: 一般触发事件有两种方式,要么是在html直接绑定,即button标签中不只有class.type和id,还要写onclick=... 还有一种,就是在js代码部 ...

  2. Hbase 建表基本命令总结

    访问hbase,以及操作hbase,命令不用使用分号 hbase shell 进入hbase list 查看表 hbase shell -d hbase(main):024:0> scan '. ...

  3. Breaking parallel loops in .NET C# using the Stop method z

    List<, , , , , , , , , }; Parallel.ForEach(integers, (int item, ParallelLoopState state) => { ...

  4. 44、网页启动Activity,网页传值Activity

         在assets新建一个demo.html 文件. <html> <head> <meta http-equiv="Content-Type" ...

  5. I2c串行总线组成及其工作原理

    采用串行总线技术可以使系统的硬件设计大大简化,系统的体积减小,可靠性提高,同时系统更容易更改和扩充 常用的串行扩展总线有:I2c总线,单总线,SPI总线,以及microwire.Plus等等 I2c总 ...

  6. 怎么限制Google自动调整字体大小

    Google默认的字体大小是12px,当样式表中font-size<12px时,或者没有明确指定字体大小,则在chrome浏览器里字体显示是12px. 最近在写代码玩的时候,我也碰到了 在FF和 ...

  7. NOIP2008 双栈队列

    1.      双栈排序 (twostack.pas/c/cpp) Tom 最近在研究一个有趣的排序问题.如图所示,通过 2 个栈 S1 和 S2,Tom 希望借助 以下 4 种操作实现将输入序列升序 ...

  8. 使用PHP输出中文JSON字符串

    PHP 和 JavaScript 交互其实很方便,PHP 原生也提供了对 JSON 格式的支持.主要包括 JSON 编码和解码两个函数: 代码如下: json_endoce: http://cn.ph ...

  9. (贪心5.2.6)URAL 1014 Product of Digits(利用数据有序化进行贪心选择)

    /* * URAL_1014.cpp * * Created on: 2013年10月11日 * Author: Administrator */ #include <iostream> ...

  10. bzoj3261 可持久化trie

    容易想到题解. 总结一下区间异或和题: 1.转化成trie 2.注意空间稍微开大 3.不要一个数右移31位 4.考虑开头要不要插一个零 5.注意可持久get的时候区间是左开右闭,但这样会变成x-2,x ...