2011-12-01 28 views
-4

例子:如何調用腳本標記中定義的JavaScript函數?

<script type="text/javascript"> 
    function test() { 
     console.log("Hello world"); 
    } 
</script> 

我怎麼會叫test()

編輯:我沒有正確解釋。

我如何使用Node.js的請求模塊加載包含JavaScript函數外部HTML文件:

request.get(options, function (error, response, body) { 
    if (error && response.statusCode !== 200) { 
    } 
    else { 
     jsdom.env({ 
      html: body, 
      scripts: ["../jquery-1.6.4.min.js"] 
     }, function (err, window) { 
      var $ = window.jQuery; 

我只是在尋找的語法來調用在「身體」的功能。

回答

3

只需將其稱爲您的頁面上的任何其他功能,jQuery就是一個框架,不需要運行JS函數。

1

嗯......也許我會用

test(); 

去但那不是jQuery的,這是普通的舊的JavaScript。

1

試試這個:

... 

    function (err, window) { 
        var $ = window.jQuery; 
        window.test(); 

... 

您也可以嘗試:

<script type="text/javascript" id="myscript"> 
    function test() { 
     console.log("Hello world"); 
    } 
</script> 

然後:

function (err, window) { 
         var $ = window.jQuery; 
         (1,window.eval)($("#myscript").html()); 
         window.test(); 
+0

當我嘗試獲得I時出現以下錯誤消息:TypeError:Object# has no method'test' –

+0

@camden_kid,如果正確完成,則應該定義函數:/。就像在腳本中傳遞的jQuery一樣,在所有的全局函數中也是如此......您確定腳本在html中像這樣被解析了嗎? https://github.com/tmpvar/jsdom – Esailija

+0

Esailija - 當我將'body'寫入文件時,我可以看到腳本中定義的所有函數。我不確定'解析'是什麼意思。我知道我正在獲取正確的html數據。我無法弄清楚如何調用其中一個函數。我用這個[http://stackoverflow.com/questions/208016/how-to-list-the-properties-of-a-javascript-object](http://stackoverflow.com/questions/208016/how-to -list-the-properties-of-a-javascript-object)來查看包含哪個窗口並且看不到該函數(雖然我在這裏抓住吸管,但我不確定該函數是否意味着要顯示) 。 –

3

所以這裏的問題是,在默認情況下,jsdom.env不執行JavaScript的在處理標記時發現。

你需要打開這些功能:

jsdom.env({ 
    // ... 
    features : { 
    FetchExternalResources : ['script'], 
    ProcessExternalResources : ['script'] 
    } 
}); 

FetchExternalResources控制jsdom是否應該甚至懶得在網絡/磁盤達到收集資源的字節

ProcessExternalResources控制是否或提取的腳本被執行

注意這些名稱被選擇爲包含其他資源類型(閱讀:圖像,CSS等)將來會被添加。這裏的想法是提供理智的默認設置,但有許多可轉動的旋鈕會影響jsdom的行爲。

相關問題