我在一个网站的头部和身体中有css和js链接,我想删除一个后缀。
头部的CSS链接如下所示:
<link rel="stylesheet" type="text/css" href="http://example.com/some.css?r=5.6" media="screen" />
<link rel="stylesheet" type="text/css" href="http://example.com/someother.css?r=5.6" media="screen" />
和身体中的一些JavaScript包括:
<script type="text/javascript" src="http://example.com/some.js?r=5.6"></script>
<script type="text/javascript" src="http://example.com/someother.js?r=5.6"></script>
现在我想从这个链接中删除“?r = 5.6”部分(使用GreaseMonkey)。
使用以下代码我找到它并可以使用它来制作 - 例如 - 一个alert():
var cssLinks=document.getElementsByTagName("link");
for (var i=0;i<cssLinks.length;i++)
{
alert(cssLinks[i].href.replace(/\?r=5.6/, ""));
}
var scriptLinks=document.getElementsByTagName("script");
for (var i=0;i<scriptLinks.length;i++)
{
alert(scriptLinks[i].src.replace(/\?v=2.2.7/, ""));
}
但我想在源代码中替换它,以便不解析?r = 5.6。我用document.innerHTML,xPath和其他人尝试过很多例子,但我找不到合适的解决方案。
你能帮忙吗? : - )答案 0 :(得分:1)
要点:
通常,当您替换查询参数时,就像那样。 EG:
http://example.com/someother.css?r=5.6
要:
http://example.com/someother.css
没有任何效果。 ?r=5.6
只是让浏览器获取最新版本文件(未缓存)的技巧,而无需实际重命名文件。
好消息是,如果你真的改变了CSS文件,那么EG:
http://example.com/File_1.css
要:
http://example.com/File_2.css
然后在Firefox中替换CSS规则,就像你希望的那样。
但是,如果您实际更改了JS文件,那么EG:
http://example.com/File_A.js
要:
http://example.com/File_B.js
然后根本没有执行新JS !旧的JS仍在内存中,以便启动。
所以,您可以这样添加新的JS:
function addJS_Node (text, s_URL) {
var scriptNode = document.createElement ('script');
scriptNode.type = "text/javascript";
if (text) scriptNode.textContent = text;
if (s_URL) scriptNode.src = s_URL;
var targ = document.getElementsByTagName('head')[0] || d.body || d.documentElement;
targ.appendChild (scriptNode);
}
addJS_Node (null, "http://example.com/File_B.js");
但是,如果两个文件(File_A.js
和File_B.js
)都使用/设置相同的计时器或事件监听器,那么这可能会产生有趣的效果。
可能的解决方法:使用AdBlock之类的内容阻止加载File_A.js
。
无论如何,这是一个完整的Greasemonkey脚本,它可以完成您所要求的
请参阅上面的说明,了解实际工作的方式和内容。
// ==UserScript==
// @name _Swap CSS and Javascript links.
// @include http://YOUR_SERVER/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// ==/UserScript==
var targCSS = $("link[rel=stylesheet][href*='r=5.6']");
targCSS.each ( function () {
var jThis = $(this);
jThis.attr ('href', jThis.attr ('href').replace (/\?r=5.6/i, '') );
} );
var targJS = $("script[src*='v=2.2.7']");
/* No workie. That is, new script will not execute.
targJS.each ( function () {
var jThis = $(this);
jThis.attr ('src', jThis.attr ('src').replace (/\?v=2.2.7/i, '') );
} );
*/
targJS.each ( function () {
var jThis = $(this);
var newSrc = jThis.attr ('src').replace (/\?v=2.2.7/i, '')
addJS_Node (null, newSrc);
} );
function addJS_Node (text, s_URL) {
var scriptNode = document.createElement ('script');
scriptNode.type = "text/javascript";
if (text) scriptNode.textContent = text;
if (s_URL) scriptNode.src = s_URL;
var targ = document.getElementsByTagName('head')[0] || d.body || d.documentElement;
targ.appendChild (scriptNode);
}