惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
J
Java Code Geeks
Martin Fowler
Martin Fowler
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
有赞技术团队
有赞技术团队
爱范儿
爱范儿
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
博客园 - 【当耐特】
Y
Y Combinator Blog
Last Week in AI
Last Week in AI
MongoDB | Blog
MongoDB | Blog
G
Google Developers Blog
博客园 - 三生石上(FineUI控件)
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
大猫的无限游戏
大猫的无限游戏
罗磊的独立博客
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
博客园 - 司徒正美

方永、南天紫雲

linux透明代理 技术的边界 停机问题通俗说明 Rust与oracle、redis集群的纠结 学习能力的增长 mac外接移动硬盘安装ArchLinux linux的死机问题 linux下全键盘操作 漂亮又好用的bspwm linux本机透明代理 ssh、mosh、autossh linux不能待机又一例 从WordPress切换到Hugo 折腾电脑开机 linux系统QQ新思路 Arch Linux的字体渲染 svn管理之submin OpenWrt自动fucking墙記錄 二维码(qrcode)名片的一些事儿 用lua nginx module搭建一个二维码(qr code)生成器 CentOS 7 安裝註記 php程序連接MySQL时只能127.0.0.1而localhost無法連接的問題 ThinkPad之FAN_ERROR、hi fi聲卡 jetty多端口部署 OpenWrt簡單暴力限網 linux中cron之PATH变量 OpenWrt的WDS無線橋接模式 再敘OpenWrt下的rtl8187無線中繼 sed之模擬tail 終端進化之二零一三
微信调试的原语
zola · 2016-10-12 · via 方永、南天紫雲

在微信中嵌入的网页,比如公众号的页面,如何查看日志,如PC浏览器一般调试页面?

有同事发了一个二维码,在微信里打开后就跳转到了一个调试页面。如下图:

一个名为“X5调试页面”的页面,http://debugx5.qq.com/,搜索后发现微信的webview引擎基于TBS(腾讯浏览服务)。 在这个调试页面“代理”一栏的最下方,有文件缓存清除功能,这是许多人寻找的微信清除缓存的功能。

而在“信息”一栏,TBS settings里的选项“是否打开TBS内核Inspector调试功能”,这又是一个非常重要的功能,选择开启,然后配合adb就可以在chrome的 chrome://inspect/#devices里看到需要调试的页面了。

然后用这个inspect调试一把http://debugx5.qq.com/,会看到这个页面的源码,js的注释里有写用的是js2java实现了javascript调用android的native code的功能, 看缓存清理的按钮,click事件关联到了一个叫clearCookieAndCache的全局函数,在控制台查看这个函数,如下:

	function clearCookieAndCache() {
        var cookiechecked = document.getElementById("id_clearcookie").checked;
        var filecachechecked = document.getElementById("id_clearfilecache").checked;
        var adfiltercachechecked = document.getElementById("id_clearadfiltercache").checked;
        var dnscachechecked = document.getElementById("id_cleardns").checked;
        
        var clearItems = (cookiechecked ? 1: 0)  + ( filecachechecked ? 2 : 0 )+
            (adfiltercachechecked ? 4 : 0) + (dnscachechecked ? 8 :0) ;
        if(clearItems == 0)
        {
            resultTips("请选择需要被清除的选项。", 1000);
            return ;
        }

        window.ProxyStatus.clearCookieAndCache(clearItems);
        resultTips((cookiechecked ? "[Cookie] ":"") + (filecachechecked ? "[文件缓存] ":"") +
                (adfiltercachechecked ? "[广告过滤缓存] ":"") + (dnscachechecked ? "[DNS缓存]" :"")
                + "被清空。" , 1000);

        document.getElementById("id_clearcookie").checked = false;
        document.getElementById("id_clearfilecache").checked = false;
        document.getElementById("id_clearadfiltercache").checked = false;
        document.getElementById("id_cleardns").checked = false;
    } 

核心代码window.ProxyStatus.clearCookieAndCache(clearItems);一句,ProxyStatus应该就是Native code暴露给js的,控制台 查看这个对象,拥有的方法挺多,都是可以望文生义的。

如此,就能知道,凡是基于tbs的webview,应该都会有ProxyStatus这个对象,在自己的页面里对ProxyStatus的方法进行调用,就 可以完成清除缓存之类的操作。(这个没有实验)