大家好,
我尝试使用以下代码在页面上显式加载effects.js 和 builder.js Scriptaculous 库:
<script type="text/javascript" src="/javascripts/scriptaculous.js?load=builder,effects"></script>
这在 FF 3.0.x、IE7 和 Opera 9.6.x 中就像一个魅力。但它在 Firefox 2.0.x 中不起作用。这些库永远不会被加载。为了让它们在 FF 2.0.x 中加载,我必须使用两个额外的 <script/> 标记显式引用它们,即:
<script type="text/javascript" src="/javascripts/scriptaculous.js?load=builder,effects"></script>
<script type="text/javascript" src="/javascripts/builder.js"></script>
<script type="text/javascript" src="/javascripts/effects.js"></script>
有谁知道 FF 2.0 和 3.0 之间的差异导致了这种行为吗?有更好的办法解决我的问题吗?
感谢您的帮助!
最佳答案
我今天喝了太多咖啡,所以我想我会尝试一下。
一种可能性是 scriptaculous.js 中的 load 函数未正确进行处理以包含作为参数传递给它的库(scriptaculous.js? load=builder,effects)。
尝试添加一个警报,看看 scriptaculous.js 中的加载函数是否正在被输入,如果是,那么该进程可能不会在 FF2 上执行预期的操作:
load: function() {
alert('In the load function!');
...rest of code here...
如果不是,那么(也许)firefox 2 不想执行加载。
加载的最后一部分似乎完成了包含其他库的工作:
$A(document.getElementsByTagName("script")).findAll( function(s) {
return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))
}).each( function(s) {
var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,'');
var includes = s.src.match(/\?.*load=([a-z,]*)/);
(includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
function(include) { Scriptaculous.require(path+include+'.js') });
});
从上面的代码中,我可以看到 includes 变量应该解析出库名称,看看是否被分配了任何内容,将其替换为以下内容:
var includes = s.src.match(/\?.*load=([a-z,]*)/);
alert(includes[0] + ' ' + includes[1]);
这应该能让您更好地了解正在发生的事情。虽然这是一个有趣的小问题,但我肯定会采用您提出的解决方案:
<script type="text/javascript" src="/javascripts/scriptaculous.js"></script>
<script type="text/javascript" src="/javascripts/builder.js"></script>
<script type="text/javascript" src="/javascripts/effects.js"></script>
关于javascript - FF 2.0.x 中的脚本加载参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/697647/