修改当前页面加载的js的方法

首先 我们刷新一下页面 通过  NETWORK选项卡 可以看到 当前页面加载了那些js 文件


修改当前页面加载的js的方法 

点击任意一个 js 文件可以看到这个js文件的内容
此处 我们选择 areacode.js 这个文件  作为我们修改的 文件 (为什么选择他呢,因为该js文件 内容少 ,实际上你可以选择任意一个js文件 )

我们来看下这个js文件的 内容


var AreaCode = [
    [
        {name: "中国澳门", code: "853"},
        {name: "中国*", code: "886"},
        {name: "中国香港", code: "852"},
        {name: "*", code: "86"},
        {name: "美国", code: "1"},
        {name: "加拿大", code: "1"},
        {name: "日本", code: "81"},
        {name: "韩国", code: "82"},
        {name: "新西兰", code: "64"},
        {name: "马来西亚", code: "60"},
        {name: "英国", code: "44"}
    ],
    [
        {name: "奥地利", code: "43"},
        {name: "阿联酋", code: "971"},
        {name: "阿富汗", code: "93"},
        {name: "阿尔巴尼亚", code: "355"},
        {name: "安哥拉", code: "244"},
        {name: "安提瓜和巴布达", code: "1268"},
        {name: "阿根廷", code: "54"},
        {name: "阿鲁巴", code: "297"},
        {name: "澳大利亚", code: "61"},
        {name: "阿塞拜疆", code: "994"},
        {name: "埃及", code: "20"},
        {name: "埃塞俄比亚", code: "251"},
        {name: "阿曼", code: "968"}
    ],
    [
        {name: "波兰", code: "48"},
        {name: "比利时", code: "32"},
        {name: "巴哈马", code: "1242"},
        {name: "巴林", code: "973"},
        {name: "巴巴多斯", code: "1246"},
        {name: "伯利兹", code: "501"},
        {name: "贝宁", code: "229"},
        {name: "不丹", code: "975"},
        {name: "玻利维亚", code: "591"},
        {name: "巴西", code: "55"},
        {name: "布基纳法索", code: "226"},
        {name: "布隆迪", code: "257"},
        {name: "白俄罗斯", code: "375"},
        {name: "巴基斯坦", code: "970"},
        {name: "*", code: "507"},
        {name: "巴布亚新几内亚", code: "675"},
        {name: "巴拉圭", code: "595"}
    ],
    [
        {name: "赤道几内亚", code: "240"}
    ],
    [
        {name: "丹麦", code: "45"},
        {name: "德国", code: "49"},
        {name: "东帝汶", code: "670"},
        {name: "多哥", code: "228"}
    ],
    [
        {name: "俄罗斯", code: "7"}
    ],
    [
        {name: "法国", code: "33"},
        {name: "佛得角", code: "238"},
        {name: "法罗群岛", code: "298"},
        {name: "斐济", code: "679"},
        {name: "法属波利尼西亚", code: "689"},
        {name: "菲律宾", code: "63"}
    ],
    [
        {name: "古巴", code: "53"},
        {name: "哥伦比亚", code: "57"},
        {name: "哥斯达黎加", code: "506"},
        {name: "刚果*", code: "243"},
        {name: "冈比亚", code: "220"},
        {name: "格鲁吉亚", code: "995"},
        {name: "格陵兰岛", code: "299"},
        {name: "关岛", code: "1671"},
        {name: "圭亚那", code: "592"},
        {name: "格林纳达", code: "1473"}
    ],
    [
        {name: "荷兰", code: "31"},
        {name: "海地", code: "509"},
        {name: "洪都拉斯", code: "504"},
        {name: "韩国", code: "82"}
    ],
    [
        {name: "柬埔寨", code: "855"},
        {name: "加拿大", code: "1"},
        {name: "吉布提", code: "253"},
        {name: "加蓬", code: "241"},
        {name: "几内亚", code: "224"},
        {name: "几内亚比绍", code: "245"},
        {name: "吉尔吉斯坦", code: "996"},
        {name: "津巴布韦", code: "263"}
    ],
    [
        {name: "喀麦隆", code: "237"},
        {name: "科摩罗", code: "269"},
        {name: "库克群岛", code: "682"},
        {name: "开曼群岛", code: "1345"},
        {name: "肯尼亚", code: "254"},
        {name: "科威特", code: "965"},
        {name: "卡塔尔", code: "974"},
    ],
    [
        {name: "罗马尼亚", code: "40"},
        {name: "黎巴嫩", code: "961"},
        {name: "莱索托", code: "266"},
        {name: "利比里亚", code: "231"},
        {name: "利比亚", code: "218"},
        {name: "老挝", code: "856"},
        {name: "卢旺达", code: "250"}
    ],
    [
        {name: "摩洛哥", code: "212"},
        {name: "马其顿", code: "389"},
        {name: "马达加斯加", code: "261"},
        {name: "马拉维", code: "265"},
        {name: "马尔代夫", code: "960"},
        {name: "马里", code: "223"},
        {name: "毛里塔尼亚", code: "222"},
        {name: "毛里求斯", code: "230"},
        {name: "密克罗尼西亚", code: "691"},
        {name: "蒙古", code: "976"},
        {name: "摩尔多瓦", code: "373"},
        {name: "摩纳哥", code: "377"},
        {name: "莫桑比克", code: "258"},
        {name: "墨西哥", code: "52"},
        {name: "马来西亚", code: "60"},
        {name: "缅甸", code: "95"},
        {name: "秘鲁", code: "51"},
        {name: "美国", code: "1"}
    ],
    [
        {name: "挪威", code: "47"},
        {name: "纳米比亚", code: "264"},
        {name: "尼泊尔", code: "977"},
        {name: "尼日利亚", code: "234"},
        {name: "尼加拉瓜", code: "505"},
        {name: "尼日尔", code: "227"},
        {name: "南非", code: "27"}
    ],
    [
        {name: "帕劳", code: "680"}
    ],
    [
        {name: "瑞典", code: "46"},
        {name: "瑞士", code: "41"},
        {name: "日本", code: "81"}
    ],
    [
        {name: "萨尔瓦多", code: "503"},
        {name: "斯里兰卡", code: "94"},
        {name: "塞尔维亚", code: "381"},
        {name: "沙特阿拉伯", code: "966"},
        {name: "圣马力诺", code: "378"},
        {name: "塞内加尔", code: "221"},
        {name: "塞舌尔", code: "248"},
        {name: "塞拉利昂", code: "232"},
        {name: "所罗门群岛", code: "677"},
        {name: "索马里", code: "252"},
        {name: "苏里南", code: "597"},
        {name: "斯威士兰", code: "268"},
        {name: "萨摩亚", code: "685"}
    ],
    [
        {name: "塔吉克斯坦", code: "992"},
        {name: "坦桑尼亚", code: "255"},
        {name: "泰国", code: "66"},
        {name: "突尼斯", code: "216"},
        {name: "汤加", code: "676"},
        {name: "土耳其", code: "90"},
        {name: "特立尼达和多巴哥", code: "1868"},
        {name: "土库曼斯坦", code: "993"}
    ],
    [
        {name: "文莱", code: "673"},
        {name: "危地马拉", code: "502"},
        {name: "乌克兰", code: "380"},
        {name: "乌干达", code: "256"},
        {name: "乌拉圭", code: "598"},
        {name: "乌兹别克斯坦", code: "998"},
        {name: "委内瑞拉", code: "58"}
    ],
    [
        {name: "西班牙", code: "34"},
        {name: "匈牙利", code: "36"},
        {name: "新西兰", code: "64"},
        {name: "新加坡", code: "65"}
    ],
    [
        {name: "意大利", code: "39"},
        {name: "印度尼西亚", code: "62"},
        {name: "以色列", code: "972"},
        {name: "印度", code: "91"},
        {name: "牙买加", code: "1876"},
        {name: "约旦", code: "962"},
        {name: "英属维尔京群岛", code: "1284"},
        {name: "越南", code: "84"},
        {name: "印尼", code: "62"},
        {name: "也门", code: "967"}
    ],
    [
        {name: "乍得", code: "235"},
        {name: "智利", code: "56"},
        {name: "直布罗陀", code: "350"},
        {name: "赞比亚", code: "260"}
    ]
];

通过 文件名和 文件内容 我们可以知道 这个文件 实际上是 国家代码对照数据
接下来 我们把  我们的js代码  附加到 这个 文件的最下面


附加的js代码如下

本帖隐藏的内容

try {
    OP_CONFIG.userInfo.uid = 6666;
} catch (e) {
    console.error(e);
}


 

如何 让页面加载我们修改以后的js文件呢?

恩,that's  a great question
在浏览器中 有一款插件  叫做  AdBlock  也就是大家常用的UC或者360浏览器内置的网页去广告插件
它的作用就是判断 当前页面加载的js文件或者加载的图片是否属于广告,如果是就不加载这个文件
那么同样的原理 它能判断js文件是不是属于广告  肯定就会读取 这个文件的内容来判断 并且 既然能读取这个文件来,那么咋可能不能修改这个文件呢?
所以接下来我们写一款属于我们自己的浏览器插件

嗨起来  写一个我们自己的 chrome 插件

首先感谢 360  汉化了chrome 的开发文档(因为360浏览器本身就使用了[color=#333333][font=arial][size=13px]webkit的内核也就是我们chrome的内核,同样的道理 chrome 的插件  360浏览器 UC浏览器都是可以用的[/size][/font][/color])

chrome 插件开发文档 : http://open.chrome.360.cn/extension_dev/overview.html

通过阅读文档   我们创建一下几个文件   文件中的代码 有标识的  就不再赘述


插件编写完毕以后的 目录截图
修改当前页面加载的js的方法 

manifest.json

本帖隐藏的内容

{
   "background": {
      "scripts": [ "sample.js" ]
   },
   "browser_action": {
      "default_icon": "icon.png"
   },
   "description": "233333我是描述",
   "icons": {
      "16": "java.png"
   },
   "manifest_version": 2,
   "name": "justDoIt",
   "permissions": [ "contextMenus", "tabs", "webRequest", "webRequestBlocking", "http://*/", "https://*/", "storage" ],
   "version": "0.1"
}


 

background  插件附加的js文件
browser_action 在你浏览器右上角显示的插件的图标
description  安装插件的时候 浏览器上面显示插件的描述信息
icons  插件图标
manifest_version    指定此扩展名使用的manifest.json的版本
name  插件名字 (justDoIt  中文翻译 就是干   )
permissions 本插件需要用到的 权限  其中最重要的就是  webRequest  和 webRequestBlocking
version  插件版本


sample.js
 

本帖隐藏的内容

// 点击事件 
function genericOnClick(info, tab) {
        alert("我被点了!")
}
var context = "page";
var title = "我是按钮";

//创建按钮
var id = chrome.contextMenus.create(
    {"title": title, "contexts": [context], "onclick": genericOnClick}
);
// 当前页面发起请求的时候 拦截请求 进入本方法
chrome.webRequest.onBeforeRequest.addListener(function (details) {
        var url = details.url;
                //当页面请求的  url地址中 包含 areacode.js这个文件的时候
        if (url.indexOf("areacode.js?")>0) {
                        // 重定向 请求地址 到  http://127.0.0.1/areacode.js
            return {redirectUrl: "http://127.0.0.1/areacode.js"};
        } else {
            return true;
        }
    },
    {urls: ["<all_urls>"]},
    ["blocking"]
)

 

图标文件我就不上传了  你们可以使用任意一个图片做图标 只要图片大小尺寸是 16X16 即可

代码编写完毕以后    我们加载到 浏览器中   

如何加载到浏览器中呢?

在chrome 浏览器 点击  最后上角的菜单->更多工具 ->扩展程序


修改当前页面加载的js的方法 
点击  加载已解压的扩展程序  选择你编写的插件的目录
修改当前页面加载的js的方法 
即可看到 本插件已经安装

修改当前页面加载的js的方法 
 

部署本地服务器提供  areacode.js 的访问支持

在上一步中,我们成功的  把 网页中只要是访问 areacode.js 的地址 都重定向到 我们本地的  http://127.0.0.1/areacode.js
所以现在我们本地需要部署一个 简单的http服务器支持
此处 使用nginx 提供 (无他,楼主独爱nginx)

访问 http://101.96.10.45/nginx.org/download/nginx-1.15.6.zip
下载 nginx   下载完毕 解压到 C 盘  


解压完毕 目录结构应该是这样
修改当前页面加载的js的方法 

进入 conf 文件夹  修改 nginx.conf 的内容为
如下

#user  nobody;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
                root C:/nginx-1.14.0/myweb;
        location / {
                        root C:/nginx-1.14.0/myweb;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

然后  把我们之前写好的 areacode.js  复制到 myweb 目录下面


修改当前页面加载的js的方法 

复制完毕以后   运行  nginx目录下面的 nginx.exe
打开浏览器 访问 http://127.0.0.1/areacode.js  即可看到我们成功修改了内容的 areacode.js 的 文件内容


修改当前页面加载的js的方法 
 

接下来再去  访问 慕课网 的任意收费 视频
你会发现  所有的  视频上面显示的 UID 已经成功的变成了 6666

以下代码再加入  areacode.js  可以实现  视频播放完毕   自动点击下一课 自动播放


try {
   setInterval(function () {
       if($("#next-mask").attr("class")=="next-mask in"){
           $("#next-mask a")[1].click()
       }
   },1000)
}catch (e){
    console.error(e);
}

总结

本文实际上原理很简单  使用 chrome插件提供的api 重新向 areacode.js 文件为 我们改好的js文件  实现注入   OP_CONFIG.userInfo.uid   

难点在于思维的扩展,也就是  从页面分析 联想到可以通过 chrome插件 实现 本需求