2011-03-08 261 views
1

我想在url欄中使用javascript來處理給定頁面的呈現html。請注意,我不想在這裏做一些非法的事情。長話短說,我的大學根據你的課程生成每週的時間表。我想使用JavaScript在生成的日程安排頁面上添加一個按鈕,以便將日程安排推送到Google日曆。不幸的是,我不能只是去編輯源碼本身(顯然),所以我想我會使用JavaScript來編輯頁面,一旦它被我的瀏覽器渲染。我在調用外部JavaScript文件來解析呈現的html時遇到了一些麻煩。通過url調用外部javascript函數

正因爲如此,這是我所:

javascript:{{var e=document.createElement('script'); 
e.src = http://www.url.of/external/js/file.js'; 
e.type='text/javascript'; 
document.getElementsByTagName('head')[0].appendChild(e);} 
functionToCall(document.body.innerHTML);} 

,當粘貼到地址欄,應該增加我的javascript文件的頭部,然後調用我的函數。 任何幫助將不勝感激,謝謝!

編輯:這是一個工作示例,如果你有興趣,謝謝大家!

javascript:(function(){var e=document.createElement('script'); 
e.src = 'http://www.somewebsite.net/file.js'; 
e.type='text/javascript';e.onload =function(){functiontocall();}; 
document.getElementsByTagName('head')[0].appendChild(e);})(); 
+2

你不容許任何時候你的JavaScript文件被加載。鉤入'e.onload' – Raynos 2011-03-08 23:41:58

+0

我有點不確定如何做到這一點。我試過'javascript:{{var e = document.createElement('script'); e.src ='http://www.impiety.net/calendar.js';e.type='text/javascript' ;; document.getElementsByTagName('head')[0] .appendChild(e); e.onload(test())} e.onload(test());}'並且都不起作用 – Blind 2011-03-08 23:54:18

+0

您錯過了' '在第一個例子中'e.src ='之後。 – 2011-03-09 01:06:17

回答

1

如果您需要的代碼來執行,一旦它被裝載,你可以做兩件事情之一://www.url:

  1. 在腳本(HTTP底部執行functionToCall(document.body.innerHTML);。 of/external/js/file.js),而不是在小書籤的末尾。

  2. 使用e.onload = function(){ functionToCall(document.body.innerHTML); };e.type='text/javascript'靠近你的JavaScript代碼/書籤結束後,而不是追加e到文檔頭之後調用functionToCall(因爲e將最有可能沒有被加載和解析appendChild(e)被稱爲之後。

+0

似乎都沒有工作。也許我構建了我的.js文件錯誤?我使用'javascript:{var e = document.createElement('script'); e.src ='http://www.impiety.net/calendar.js';e.type='text/javascript'; e.onLoad = function(){test();}; document.getElementsByTagName('head')[0] .appendChild(e);}'並且它不起作用 – Blind 2011-03-09 00:24:14

+0

@Bind - 將整個東西包裝在函數表達式中:'javascript:(function(){// your_code_here ;})();'它應該全部*只是工作* – 2011-03-09 00:33:45

+0

@Sean Vieira - 你是說要把實際的代碼體放在那裏,還是把它放在那裏?因爲'javascript:(function(){var e = document.createElement('script'); e.src ='http://www.impiety.net/calendar.js';e.type='text/javascript' ; e.onLoad = function(){test();}; document.getElementsByTagName('head')[0] .appendChild(e);})();'不起作用 – Blind 2011-03-09 00:59:20

0

不能您使用合適的工具,如Greasemonkey的?

1

我看你已經接受了答案,這是完全有效的和偉大的,但我想提供一個有用的牛逼我爲自己製作的。

這是一個名爲zbooks的小書籤生成器。
(是的,它是我的網站,不,我不是要發送垃圾郵件的,有頁面上沒有廣告,我用它贏得你們的任何)

它的啓用jQuery和我認爲這是簡單易用(但我建立了它,所以誰知道)。如果您需要關於如何使用它的廣泛解釋,請告訴我,以便我可以做得更好。如果您願意,甚至可以使用browse over the source

最重要的部分是業務邏輯得到jQuery的網頁上:

//s used for the Script element 
    var s = document.createElement('script'); 
    //r used for the Ready state 
    var r = false; 
    //set the script to the latest version of jQuery 
    s.setAttribute('src', 'http://code.jquery.com/jquery-latest.min.js'); 
    //set the load/readystate events 
    s.onload = s.onreadystatechange = function() 
    { 
/** 
* LOAD/READYSTATE LOGIC 
* execute if the script hasn't been ready yet and: 
* - the ready state isn't set 
* - the ready state is complete 
* - note: readyState == 'loaded' executes before the script gets called so 
*  we skip this event because it wouldn't have loaded the init event yet. 
*/ 
     if (!r && (!this.readyState || this.readyState == 'complete')) 
     { 
     //set the ready flag to true to keep the event from initializing again 
     r = true; 
     //prevent jQuery conflicts by placing jQuery in the zbooks object 
     window.zbooks = {'jQuery':jQuery.noConflict()}; 
     //make a new zbook 
     window.zbooks[n] = new zbooks(c); 
     } 
    }; 
    //append the jQuery script to the body 
    b.appendChild(s);