2012-01-29 70 views
2

我想在页面上添加一个带有onclick事件的按钮。它最终会打开一个覆盖div。使用Greasemonkey添加我自己的onclick功能

但是,我连警报都跑不了。

我已经使用了一些技巧,如unsafeWindow,并将脚本标签添加到正文中,但仍然无效。

这是我现在使用的代码:

function main() { 
    var script_source = '<script type="text/javascript">function doenwedan(){alert("hebben we gedaan!");}</script>'; 
    var link_knop = '<br /><br /><br /><br /><button onclick="doenwedan()" value="gaan we doen">gaan we doen</button>'; 
    var orginele_pagina = document.getElementById('ds_body').innerHTML; 
    document.getElementById('ds_body').innerHTML =orginele_pagina + link_knop + script_source ; 
} 

main(); 

我怎样才能得到这个工作?
我需要这样的技术,因为当覆盖DIV被调用时,就会有新的功能需要,所以如果有注入他们,那么......

回答

1

几件事情:

  1. 不要如果你不需要注入JS(在邪恶霸主名单旁边的“不要变成蛇,它永远不会有帮助”)。
  2. 如果您不需要,请不要与innerHTML拼抢。它破坏了事物并导致了尝试正则表达式HTML的诱惑。
  3. 使用DOM方法添加东西,但极少数例外。
  4. 我不确定无论如何都会解析创建的脚本节点。
  5. 不妨开始使用jQuery。它使事情变得更简单,更健壮。

全部放在一起,你的脚本将成为类似:

// ==UserScript== 
// @name  _Add a button 
// @include http://YOUR_SERVER/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js 
// ==/UserScript== 

function doenwedan() { 
    alert ("hebben we gedaan!"); 
} 

var orginele_pagina = $('#ds_body'); 
orginele_pagina.append (
    '<br><br><br><br><button id="myButton" value="gaan we doen">gaan we doen</button>' 
); 

$("#myButton").click (doenwedan); 
+0

的jQuery(因此)脚本的一块lookes像它不起作用:SI得到任何按钮,现在没事了。 .. – Mathlight 2012-01-29 07:32:33

+0

该脚本完美地工作(只要您正确设置了@ @ include),我只需再次检查。你将必须清楚明确地说明它如何“不起作用”。验证以下内容:(1)您没有使用Greasemonkey 0.9.14版本,(2)在您的Firefox用户配置文件中,脚本的'gm_scripts'文件夹中存在'jquerymin.js'文件,(3)真的是具有** id **“ds_body”的页面上的节点,(4)该节点不通过AJAX添加。 – 2012-01-29 08:41:30

+0

(1)我正在使用版本0.9.15。 (2)我需要这种方式:// @require \t \t http://code.jquery.com/jquery-1.7.1.min.js(3)那个节点真的很激动。 (4)该节点是身体的一部分(身体标记的身份证),所以我ashume它没有添加ajax ... – Mathlight 2012-01-29 11:26:48