|
阅读:2765回复: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异步加载也够用了 |
|