#1 - 2019-5-25 08:56
烈之斩 (V1046-R MAHORO)
最近写了个很简单的US脚本是是劫持某个网站的global函数来实现一些自己想要的功能。
写法来自这里:https://stackoverflow.com/a/21274652
完整代码就不贴了,最小化之后就是这样:
我的问题在于,这个脚本在
https://moca-news.net/article/20 ... 530a_/image009.html
这类网页工作完全正常,
但是在 诸如
https://moca-news.net/imgsearch/ ... tid=2013110616530a_
这类网页里,我修改过之后的function虽然最后还是可以成功inject(在网页完全load完之后console输入image_load_body显示的是我的修改版而不是原始),但是实际运行的还是在 /large_image.js 里的image_load_body,而不是我的修改版(控制台不会显示'image_load_body replaced')。
这俩网页虽然不太一样,但是感觉原理都差不多,不知道为什么一个行一个不行。改了半天run-at 也没用。
求教!
写法来自这里:https://stackoverflow.com/a/21274652
完整代码就不贴了,最小化之后就是这样:
// ==UserScript==
// @match https://moca-news.net/*
// ==/UserScript==
addJS_Node(image_load_body);
function addJS_Node(text, s_URL, funcToRun, runOnLoad) {
var D = document;
var scriptNode = D.createElement('script');
if (runOnLoad) {
scriptNode.addEventListener("load", runOnLoad, false);
}
scriptNode.type = "text/javascript";
if (text) scriptNode.textContent = text;
if (s_URL) scriptNode.src = s_URL;
if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()';
var targ = D.getElementsByTagName('head')[0] || D.body || D.documentElement;
targ.appendChild(scriptNode);
}
function image_load_body(art_id, img_id, _mode, _retry) {
console.log('image_load_body replaced');
}
我的问题在于,这个脚本在
https://moca-news.net/article/20 ... 530a_/image009.html
这类网页工作完全正常,
但是在 诸如
https://moca-news.net/imgsearch/ ... tid=2013110616530a_
这类网页里,我修改过之后的function虽然最后还是可以成功inject(在网页完全load完之后console输入image_load_body显示的是我的修改版而不是原始),但是实际运行的还是在 /large_image.js 里的image_load_body,而不是我的修改版(控制台不会显示'image_load_body replaced')。
这俩网页虽然不太一样,但是感觉原理都差不多,不知道为什么一个行一个不行。改了半天run-at 也没用。
求教!
我试了你的脚本,虽然成功替换了image_load_body并执行了一次,但是原始的image_load_body也被执行了(否则图片应该加载不出来)。