2012-01-29 49 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