Javascript 使用greasemonkey脚本生成链接

Javascript 使用greasemonkey脚本生成链接,javascript,hyperlink,greasemonkey,Javascript,Hyperlink,Greasemonkey,我试图用Greasemonkey编写一个脚本,在一个框架中生成链接,但由于我有限的Javascript知识,我真的不知道如何做到这一点 主题示例: <html> <head> <frameset border="0" frameborder="no" framespacing="0" cols="*,280" rows="*"> <frameset border="0" frameborder="NO" framespacing="0" cols="*"

我试图用Greasemonkey编写一个脚本,在一个框架中生成链接,但由于我有限的Javascript知识,我真的不知道如何做到这一点

主题示例:

<html>
<head>
<frameset border="0" frameborder="no" framespacing="0" cols="*,280" rows="*">
<frameset border="0" frameborder="NO" framespacing="0" cols="*" rows="*,200">
<frameset border="0" frameborder="NO" framespacing="0" cols="*" rows="75,*">
<frame scrolling="NO" name="bannerFrame" src="banner.php">
<frame scrolling="auto" name="mainFrame" src="main.php">
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<body class="framemainbg" marginwidth="0" marginheight="0" topmargin="0" leftmargin="0">
<table class="areadescription" cellspacing="0" cellpadding="0" border="0">
<br>
<table>
<tbody>
<tr>
<td>
<p class="personlistcaption">Text:</p>
<p class="listusersrow">
<table>
<tbody>
<tr>
<td valign="top">
<td valign="top">
<b>Text </b>
Text -
<a href="fight.php?action=attacknpcmenu&checkid=1347789191&act_npc_id=764">Attack</a>
-
<a class="fastattack" onclick="this.href += '&yscroll=' + window.pageYOffset;" href="fight.php?action=attacknpc&checkid=8409099&act_npc_id=764">Quickattack</a>
<br>
Text
</td>
</tr>
</tbody>
</table>
</p>
</td>
</tr>
</tbody>
</table>
<br>
<table>
<form name="formular">
</body>
</html>
</frame>
</frameset>
<frameset border="0" frameborder="NO" framespacing="0" cols="*" rows="*,0">
</frameset>
<frameset border="0" frameborder="NO" framespacing="0" cols="*" rows="*,360">
</frameset>
<noframes><body> Text </body></noframes>
</html>


文本:

正文 正文- -
正文


正文
期望输出的示例:

<html>
<head>
<frameset border="0" frameborder="no" framespacing="0" cols="*,280" rows="*">
<frameset border="0" frameborder="NO" framespacing="0" cols="*" rows="*,200">
<frameset border="0" frameborder="NO" framespacing="0" cols="*" rows="75,*">
<frame scrolling="NO" name="bannerFrame" src="banner.php">
<frame scrolling="auto" name="mainFrame" src="main.php">
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<body class="framemainbg" marginwidth="0" marginheight="0" topmargin="0" leftmargin="0">
<table class="areadescription" cellspacing="0" cellpadding="0" border="0">
<br>
<table>
<tbody>
<tr>
<td>
<p class="personlistcaption">Text:</p>
<p class="listusersrow">
<table>
<tbody>
<tr>
<td valign="top">
<td valign="top">
<b>Text </b>
Text -
<a href="fight.php?action=attacknpcmenu&checkid=1347789191&act_npc_id=764">Attack</a>
-
<a class="fastattack" onclick="this.href += '&yscroll=' + window.pageYOffset;" href="fight.php?action=attacknpc&checkid=8409099act_npc_id=764">Quickattack</a>
-
<a href="fight.php?action=slapnpc&amp;checkid=8409099&amp;act_npc_id=764&amp;mark=0">Hit</a>
-
<a href="fight.php?action=chasenpc&amp;checkid=8409099&amp;act_npc_id=764&amp;">Chase</a>
<br>
Text
</td>
</tr>
</tbody>
</table>
</p>
</td>
</tr>
</tbody>
</table>
<br>
<table>
<form name="formular">
</body>
</html>
</frame>
</frameset>
<frameset border="0" frameborder="NO" framespacing="0" cols="*" rows="*,0">
</frameset>
<frameset border="0" frameborder="NO" framespacing="0" cols="*" rows="*,360">
</frameset>
<noframes><body> Text </body></noframes>
</html>


文本:

正文 正文- - - -
正文


正文
应生成以下链接:

-
<a href="fight.php?action=slapnpc&amp;checkid=8409099&amp;act_npc_id=764&amp;mark=0">Hit</a>
-
<a href="fight.php?action=chasenpc&amp;checkid=8409099&amp;act_npc_id=764&amp;">Chase</a>
-
-
“checkid=…”和“npc_id=…”的值必须与此链接中的值相同:

<a class="fastattack" onclick="this.href += '&yscroll=' + window.pageYOffset;" href="fight.php?action=attacknpc&checkid=8409099act_npc_id=764">Quickattack</a>

好的,这只是基本的,这里没有具体的内容

首先,我假设您要从中复制URL参数的链接是唯一一个带有
class=“fastack”
的链接,因为:

接下来,我们需要:

…让它:

…并给出:

接下来,我们就在原始链接之后,如下所示:

    var nextNode = link.nextSibling;
    link.parentNode.insertBefore( newlink, nextNode );
哎呀,我们忘了先插入!不用担心,我们仍然可以做到:

    var delim = document.createTextNode( ' - ' );
    link.parentNode.insertBefore( delim, newlink );
现在我们可以对另一个链接执行相同的操作:

    var newlink2 = document.createElement( 'a' );
    newlink2.href = link.href.replace( 'action=attacknpc', 'action=chasenpc' );
    newlink2.textContent = 'Chase';
    link.parentNode.insertBefore( delim.cloneNode( true ), nextNode );
    link.parentNode.insertBefore( newlink2, nextNode );
这一次,我记得先插入分隔符。我使用了与上面相同的
delim
节点,但我希望插入另一个相同的分隔符,而不是将原始分隔符移动到DOM中的新位置

最后,我们需要关闭
if
块,就是这样:

}
(免责声明:我没有实际测试上面的代码。我认为它应该可以工作,但可能有我遗漏的bug或打字错误。)

编辑:更改代码,将新链接插入到原始链接之后,而不是父段落末尾

附录: 如果您在文档中有多个带有
class=“fastack”
的链接,并且希望将上述代码应用于其中的每一个链接,您可以通过将上面的前两行替换为所有链接上的循环,而不仅仅是第一行:

var links = document.getElementsByClassName( 'fastattack' );
for ( var i = 0; i < links.length; i++ ) {
    var link = links[i];
    // now do stuff with link just like above
var links=document.getElementsByClassName('fastack');
对于(变量i=0;i
好的,这只是基本的,这里没有具体的内容

首先,我假设您要从中复制URL参数的链接是唯一一个带有
class=“fastack”
的链接,因为:

接下来,我们需要:

…让它:

…并给出:

接下来,我们就在原始链接之后,如下所示:

    var nextNode = link.nextSibling;
    link.parentNode.insertBefore( newlink, nextNode );
哎呀,我们忘了先插入!不用担心,我们仍然可以这样做:

    var delim = document.createTextNode( ' - ' );
    link.parentNode.insertBefore( delim, newlink );
现在我们可以对另一个链接执行相同的操作:

    var newlink2 = document.createElement( 'a' );
    newlink2.href = link.href.replace( 'action=attacknpc', 'action=chasenpc' );
    newlink2.textContent = 'Chase';
    link.parentNode.insertBefore( delim.cloneNode( true ), nextNode );
    link.parentNode.insertBefore( newlink2, nextNode );
这一次,我记得先插入分隔符。我使用了与上面相同的
delim
节点,但我希望插入另一个相同的分隔符,而不是将原始分隔符移动到DOM中的新位置

最后,我们需要关闭
if
块,就是这样:

}
(免责声明:我没有实际测试上面的代码。我认为它应该可以工作,但可能有我遗漏的bug或打字错误。)

编辑:更改代码,将新链接插入到原始链接之后,而不是父段落末尾

附录: 如果您在文档中有多个带有
class=“fastack”
的链接,并且希望将上述代码应用于其中的每一个链接,您可以通过将上面的前两行替换为所有链接上的循环,而不仅仅是第一行:

var links = document.getElementsByClassName( 'fastattack' );
for ( var i = 0; i < links.length; i++ ) {
    var link = links[i];
    // now do stuff with link just like above
var links=document.getElementsByClassName('fastack');
对于(变量i=0;i
但现在我有了这样一个编队:文本攻击-快速攻击文本命中-追逐文本攻击-快速攻击文本命中-追逐但我需要这个编队:文本攻击-快速攻击-命中-追逐文本这可能吗?啊,我明白你的意思;我没有注意到链接后有更多文本。应该是这样的我想现在已经修复了。如果不止一个

那么就有两个不同的checkid=&npc\u id=我必须更改什么才能生成正确的链接?您可以使用
for
getElementsByClassName()的结果进行循环
;请参见上面的“编辑以回答”。只有一个小问题:如果单击生成的链接,我必须重新加载页面以再次生成其他链接。是否有方法自动引用(onchange?)如果我点击生成的链接,网站会被关闭吗?但是现在我有了这样的信息:文本攻击-快速攻击文本命中-追逐文本攻击-快速攻击文本命中-追逐但是我需要这样的信息:文本攻击-快速攻击-命中-追逐文本这是可能的吗?啊,我明白你的意思了;我没有注意到有mo在链接后重新发送文本。我认为现在应该修复它。如果不止一个

那么有两个不同的checkid=&npc\u id=我必须更改什么才能生成正确的链接?您可以使用
for
getElementsByClassName()的结果进行循环
;请参见上面的“编辑以回答”。只有一个小问题:如果我单击生成的链接,我必须重新加载页面以再次生成其他链接。如果我单击生成的链接,是否有方法自动刷新(onchange?)网站?不知怎的,这个问题出现在“最新”页面上第……节。。。。werid@David可能是因为它刚从webapps迁移过来,所以它是so提要的新内容。不知怎的,这个问题出现在了“最新”部分。。。。werid@David可能是因为它刚从webapps迁移,所以它是so提要的新内容。