阅读:2367回复:5
想问一下怎么把一个油猴脚本打包成扩展呢?
我有一个油猴脚本,将页面的attribute修改编辑,如果用油猴脚本管理器加载就会只加载一次,而chrome系的浏览器可以直接拖进去当扩展用,会一直加载修正
|
|
1楼#
发布于:2020-11-18 20:15
没看太明白。“会一直加载修正”是什么意思?
|
|
2楼#
发布于:2020-11-19 12:25
|
|
3楼#
发布于:2020-11-20 10:08
说明你的代码写得不严谨,没有考虑到页面DOMContentLoaded/load事件后再动态增改的内容。
严谨点就用Mutation Observer API监听页面变化,想偷点懒就用setTimeout/setInterval反复执行 |
|
4楼#
发布于:2020-11-20 11:33
taoww:说明你的代码写得不严谨,没有考虑到页面DOMContentLoaded/load事件后再动态增改的内容。其实这脚本也不是我写的,我只是看明白了他在做什么。。。 我曾经尝试过让这个脚本拖到最后运行,但感觉效果也不太行,您提到那个API我百度了一下用法,看的不是很懂 // ==UserScript== // @name Link Target 'blank' to removal // @namespace armeagle.nl // @include * // @exclude http://webmail.cpanel.your-webhost.nl/* // @exclude *armeagle.nl* // @version 0.0.1.20140705065616 // @description Remove target blank from all links // ==/UserScript== if (window.top == window) { var ahrefs = document.querySelectorAll('a[target]'); for ( a_ind = 0; a_ind < ahrefs.length; a_ind++ ) { var a = ahrefs[a_ind]; a.removeAttribute('target'); } // remove base target tag var bases = document.querySelectorAll("base[target]"); for (ind = 0; ind < bases.length; ind++) { var base = bases[ind]; base.removeAttribute('target'); } } 这脚本是这样的如果要用那个API,是在IF函数之前再嵌套IF吗 |
|
5楼#
发布于:2020-11-23 10:56
因为你的脚本头部中没有写@run-at,用的是默认值document-end,也就是在页面加载完但外部资源没有加载完时运行。而chrome系自带的脚本管理器,我记得是在页面上所有资源加载完毕后运行,差不多等效于document-idle。你可以先加个 @run-at document-idle 看看效果。
如果还不行,就用setTimeout再加上点延时,比如下面这样等个2000毫秒再执行 // ==UserScript== // @name Link Target 'blank' to removal // @namespace armeagle.nl // @include * // @exclude http://webmail.cpanel.your-webhost.nl/* // @exclude *armeagle.nl* // @version 0.0.1.20140705065616 // @description Remove target blank from all links // @run-at document-idle // ==/UserScript== if (window.top == window) { setTimeout(function() { var ahrefs = document.querySelectorAll('a[target]'); for ( a_ind = 0; a_ind < ahrefs.length; a_ind++ ) { var a = ahrefs[a_ind]; a.removeAttribute('target'); } // remove base target tag var bases = document.querySelectorAll("base[target]"); for (ind = 0; ind < bases.length; ind++) { var base = bases[ind]; base.removeAttribute('target'); } }, 2000); }把setTimeout换成setInterval就是每隔2000毫秒执行一次,简单应付一下一般的ajax异步加载也够用了 |
|