2010-08-23 77 views
0

我在Delphi中編寫桌面應用程序。到目前爲止,我一直在使用TWebBrowser組件1)完全加載一個頁面,然後2)然後發送Javascript到它(Webbrowser.Navigate('javascript: join_game()')從地址欄外部運行Javascript

但我不是很喜歡那樣,因爲我不得不等待TWebBrowser完全加載頁。我不用它來做其他事情。該程序看起來像這樣:

repeat begin 
    SourceCode:=HTTPGetText(PAGE_URL); 
    // now parse the code and depending on the result either call js: join_game() or js: leave_game() 
end; 

每當無論這些功能被調用時,服務器添加或刪除我的,因爲當前登錄的一個(自動保存在cookie中)從大堂到/。

我所問的是,是它在某種程度上可以調用JS腳本無需加載頁面,像寫這篇到地址欄:http://www.pagewithjs.com/javascript:function()

+0

不知道,但我認爲這樣的網址內的JS調用將被瀏覽器棄用,因爲它是一個安全漏洞。 (例如,你得到的網址並打開它,它會執行JavaScript,向你發送cookie) – fantactuka 2010-08-23 08:27:28

回答

0

Javascript代碼位於HTML頁面(或HTML中引用的腳本文件中),因此必須在代碼執行之前加載頁面。

標準HTML協議不提供向URL添加「腳本調用參數」的方法。

只有當腳本直接向服務器發送HTTP請求時,纔有可能從HTML客戶端模擬此請求。

+0

垃圾。那麼,我想我將不得不採用那種不那麼優雅的風格。不管怎麼說,還是要謝謝你。 – 2010-08-23 09:19:26

0

如果你的功能是足夠小,那麼你可以簡單地把它在URL內部。說,例如,你有以下功能:

function foo(text) { 
    var a = text.split(/\W+/g); 
    return a.length; 
} 

,你想這樣稱呼它:foo('hello world'),那麼你可以這樣寫到地址欄:

javascript:(function(text){var a=text.split(/\W+/g);return a.length;})('hello world') 

請注意,您圍繞函數體也應該有括號:(function(){})這會導致它被視爲函數指針。

還要注意不同的瀏覽器對URL的長度有不同的限制。如果我沒有記錯,那麼IE的最低限制是2048個字符。

HTH。

+0

謝謝,但那不是我的意思。 JS函數存儲在服務器上,我需要服務器通過該調用執行某些操作。 – 2010-08-23 08:33:53