我正在查看FireBug Lite并看到他们使用非常酷的技术将选项传递到外部脚本文件中。
<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js">
{
overrideConsole: false,
startInNewWindow: true,
startOpened: true,
enableTrace: true
}
</script>
我想知道是否有人知道这种技术的名称,我可以在哪里找到有关它的更多信息或它是如何工作的。看起来很酷。谢谢!
答案 0 :(得分:4)
你可能认为这不是一种自动变量传递技术。
他们所有的代码都循环遍历所有script
代码,直到找到加载代码的代码(通过将src
属性与正则表达式/(firebug-lite(?:-\w+)?(?:\.js|\.jgz))(?:#(.+))?$/;
进行比较)。< / p>
如果找到了标记,它只会得到.innerHTML
标记的script
,并对其进行评估。
我想这个(未命名的)技术在现实世界中并不相关,因为我们没有保证找到哪个script
标签引用我们的库的方法(特别是因为它对所有人来说都很常见)脚本将被合并到实时服务器上的一个脚本文件中。)
此外,我怀疑这是如何跨浏览器的;因为它肯定不会被spec所指出,其中指出:
说完(并考虑过):spec表示浏览器不应解释这两者。然而,这与该技术无关。浏览器不必插入两者,因为脚本的内容是通过innerHTML
读入的(即使它确实在内容中读取,它也不会造成任何伤害)。只要浏览器符合规范,并加载URI(所有浏览器都这样做),就没有问题! (除了不知道/保证您的图书馆所属的script
标签)。
脚本可以在。中定义 SCRIPT元素的内容或 外部文件。如果是src属性 未设置,用户代理必须解释 元素的内容为 脚本。如果src有URI值, 用户代理必须忽略该元素 内容并通过检索脚本 URI。
(即,不要同时解读)。
答案 1 :(得分:2)
继@ Matt的回答,并澄清我的评论:
var doc = Firebug.browser.document;
var script = doc.getElementsByTagName("script")[index];
var url = getScriptURL(script);
var isExternal = url && url != doc.location.href;
try
{
if(isExternal)
{
Ajax.request({url:url, onSuccess:renderProcess, onFailure:onFailure})
}
else
{
var src = script.innerHTML;
renderProcess(src)
}
}
catch(e)
{
onFailure()
}