簡體   English   中英

JavaScript代碼內部<script>標記

[英]JavaScript Code Inside <script> Tag

顯然,JSON對象可以在鏈接腳本中傳遞。 我正在試圖弄清楚它是如何工作的(如果它有效):

<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js">
{
    overrideConsole: false,
    startInNewWindow: true,
    startOpened: true,
    enableTrace: true
}
</script>

我在firebug lite文檔中注意到了它: http//getfirebug.com/firebuglite#ScriptJSONOptions

由於元素具有src屬性,因此不會執行內容。 它不是嚴格合法的。 HTML5規范說:

如果存在src屬性,則該元素必須為空或僅包含與腳本內容限制匹配的腳本文檔。

<script>元素的內容既不是有效的JSON,也不是有效的JavaScript。 它不是有效的JSON,因為未引用屬性名稱。 它不是有效的JavaScript,因為雖然它看起來像帶有標記語句的塊表達式,但startInNewWindow之后的冒號不能合法地出現在那里。

也就是說,加載的腳本總是可以查找最后一個腳本元素並解析其內容:

 var scripts = document.getElementsByTagName('SCRIPT');
 var lastScript = scripts[script.length - 1];
 var content = eval(lastScript.innerText || lastScript.textContent);

瀏覽器將忽略<script src />標記中的任何內容。

但是,Firebug Lite Javascript將專門找到其<script>標記並手動解析內容。

以下是有問題的代碼解析JSON對象以防任何人感興趣。

// process the Script JSON Options
var innerOptions = FBL.trim(script.innerHTML);
if (innerOptions) {
    var innerOptionsObject = eval("(" + innerOptions + ")");

    for (var name in innerOptionsObject) {
        var value = innerOptionsObject[name];

        if (name == "debug") {
            Env.isDebugMode = !!value;
        }
        else if (name in Env.Options) {
            Env.Options[name] = value;
        }
        else {
            Env[name] = value;
        }
    }
}

http://code.google.com/p/fbug/source/browse/lite/branches/firebug1.5/build/firebug-lite-debug.js#478

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM