2012-06-27 34 views
0

標題是我總結它的最好方法。如何解釋這件事有點模糊。 基本上,如果我在html文件中包含了持有JSON函數的JavaScript文件,那麼觸發JSON函數 - 回調起作用。但是,如果我只是從它自己的文件中調用JSON函數 - 回調從不會觸發。不知道這是否是某種JavaScript或Web瀏覽器安全功能。對於解釋會很有幫助。如果從自己的文件中調用函數,JSON回調不會觸發

以下是一些示例。

工作版本:

json.html:(下調)

<html> 
<head><script type="text/javascript" src="json.js"></script></head> 
<script> 
    JSON_Object(json_url, function(json_obj) { 
     alert(json_obj); // this version works! 
    }); 
</script> 
<html> 

json.js:

function JSON_Object(json_url, callback) { 
    // This function will return an object to the JSON data. 
    json_url = json_url + "&callback=jsonCallback"; 

    var json_script = document.createElement("script"); 
    json_script.setAttribute("src", json_url); 
    json_script.setAttribute("type", "text/javascript"); 

    window.jsonCallback = function(jsonObjReturn) { 
     // cleanup 
     document.body.removeChild(json_script); 
     delete window[callback]; 

     callback(jsonObjReturn); // use our callback function to return the data. 
    } 

    document.body.appendChild(json_script); 
} 

非工作版本 - 裏面json.js另一個功能:

JSON_Object(content_page, function(json_obj) { 
     alert(json_obj); // This version doesn't work. Never called. 
    }); 
+0

有沒有錯誤?這一行:'刪除窗口[callback];'。你可能想'刪除window.jsonCallback;'。應該不重要。 – freakish

+0

其實,現在我檢查。我確實在json_url.php上有錯誤。 錯誤:「未捕獲的ReferenceError:jsonCallback未定義」 我使用的是Chrome,並在元素視圖中看到過。 需要注意的是,如果它不起作用,腳本是Chrome擴展程序加載的UserScript。我認爲這與它有關。可能是某種形式的範圍。 –

+0

給我們一些更多的信息。腳本如何被加載以及擴展的作用是什麼?通常擴展和背景頁面是分開的。因此'window'變量在後臺是另外的東西,而其他的東西是在後臺。 – freakish

回答

0

之後有點研究,我發現我是對的。它是擴展的網頁瀏覽器安全功能。 從以下鏈接:從頁面

However, content scripts have some limitations. They cannot:

  • Use variables or functions defined by their extension's pages
  • Use variables or functions defined by web pages or by other content scripts

JSON http://code.google.com/chrome/extensions/content_scripts.html

報價屬於上述類別,因爲它使用的功能爲它的回調。

相關問題