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)
        //打印结果为  专注探索

    }
时间: 2024-10-11 00:00:55

WebKit笔记的相关文章

WebKit 渲染过程

webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 Webkit渲染过程包括很多数据和模块 数据:网页内容,DOM树,内部表示,图像 模块:HTML解释器,CSS解释器,JavaScript引擎,布局和绘图模块 根据数据的方向,渲染分三个阶段 1,网页的URL 到构建完DOM 树 2,DOM树 到 构建完 Webkit的绘图上下文 3,绘图上下文 到 最终的图像 下面是详细的对三

Chromium多进程资源加载

webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 多进程 资源的实际加载在各个WebKit Port中有不同的实现.Chromium采用的是多进程的资源加载机制 根据带有资源缓存机制的资源加载过程,在ResourceHandle类之下的部分,是不同的移植对获取资源的不同实现. 在Chromium中,获取资源的方式是利用多进程的资源加载架构.如下图,描述了 关于 Chromium

Qt学习笔记-Qtcreator的webkit和qt4.7.0的版本有关

之前下载了一个最新的是qtcreator,是通过ubuntu的是apt-get下载的.可是里面没有webkit控件.网上的网友说是最新的没有了.要用老版的,于是下载了一个2.5.2的就正常了. 用老版本的qtcreator无法正常显示网页在webkit. 后来发现是qt版本的问题. 我之前用的qt4.7.0是无法显示的.  改成4.8.6就正常了.

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

转载地址:http://www.cnblogs.com/PeunZhang/archive/2013/02/28/2907708.html 去年年底,做完最后一个项目就可以开开心心回家,可是在测试阶段,发现了不少bug,为了不影响回家时间,加班加点也要解决这些问题,这里算是工作回忆,也算是工作的一点小总结. 在ios4+和android2+系统,当手指触摸屏幕a标签链接或按钮时,会产生不同的效果,对于ios点击元素的时候,就会出现一个半透明的灰色背景:对于android则出现红色的边框.对这2个

JS篇 &lt;&lt;Webkit技术内幕&gt;&gt;笔记

发展: 2003年 苹果发布Safari浏览器 2005年 Webkit项目开源,项目包括:WebCore.Javascript引擎.系统调用接口层等 2004年 Firefox浏览器发布 2008年 基于Webkit内核的Chromium项目启动 2010年 内部增加Webkit2子项目,类似于Blink思想,基于多进程的方式,分离浏览器接口调用层和实现层(渲染层). 2013年 基于分歧,Google宣布独立运作Blink项目 Webkit渲染过程分为三个阶段: 1. 生成DOM树 URL请

Effective Objective-C 2.0重读笔记---1

上次看这本书的时候匆匆走了一遍,最近不太忙,重温了一遍,把笔记写出来~.. 有兴趣的可以去买一本,感觉这本书还是挺不错的 由于大部分是在坐车的时候用手机写的,所以代码很少,图也很少 1. 尽量使用向前声明,延后引入头文件的时间,这样可以减少编译时间2. 使用arraywithobjects:....如果遇到为空的变量,就会自动终止,后面的变量便会添加不上,切不会报错,会造成数据不一致问题,所以尽量使用字面量语法创建相关对象,减少出错且减少代码量3. 使用字面量创建的对象都是不可变的,如果要获得可

Android学习笔记(四五):互联网通信-HttpClient、XML解析(W3C)

前几日Android发布了4.0 Icecream,昨天上网发现Begining Book中有Edition 3的版本,比对一下,还是有相当的改动,不仅仅增加了tablet的部分,对原有的章节有有一些修订,前后的调整等等.先按Edtion 2的顺序看,相同章节的看Edtion 3,然后回头看Edition 3的Chapter 24.25(E2的36).26.27.28.29.44.45.46.47几个新增章节.同时将模拟器改为Android 2.3的版本,已适应可能新增的改动. 访问Intern

安卓开发复习笔记——WebView组件

我们专业方向本是JAVA Web,这学期突然来了个手机App开发的课设,对于安卓这块,之前自学过一段时间,有些东西太久没用已经淡忘了 准备随笔记录些复习笔记,也当做温故知新吧~ 1.什么是WebView? WebView(网络视图)能加载显示网页,可以将其视为一个浏览器,它使用了WebKit渲染引擎加载显示网页. 废话不多说,直接上代码 1.需要在xml布局文件中声明WebView组件 1 <WebView 2 android:id="@+id/webview" 3 androi

高三笔记系列(七--九章)

写在前面:暂时只是粗略的排版,以后还会整理.也可到 http://bulabula.top/高三笔记/笔记7-9.txt 下载TXT版.. 七.函数表达式    1).定义函数的方式有两种:函数声明和函数表达式.    2).函数声明提升(function declaration hoisting),意思是在执行代码之前会先读取函数声明.函数声明可以放在调用它的语句后面.    3).函数表达式:创建一个匿名函数(也可以叫拉姆达函数)并将它赋值给变量.    4).函数声明和函数表达式的区别: