在<script>标签内的JavaScript代码

6

显然,可以在链接脚本内传递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
(注:原文已经是中英混杂的格式,故无需翻译)
3个回答

9
因为该元素具有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);

6
浏览器会忽略<script src />标签中的任何内容。
但是,Firebug Lite Javascript将专门查找其<script>标签,并手动解析内容。

太棒了,谢谢。我想我找到它了!http://code.google.com/p/fbug/source/browse/lite/branches/firebug1.5/build/firebug-lite-debug.js#478 - user996015

1

以下是相关代码,用于解析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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接