在我的HTML文件中,我已将链接到JS:

src="myscript.js?config=true"

我的JS能直接读取这个var的值吗?

alert (config);

这不起作用,FireFox错误控制台说“未定义配置”。如何读取JS文件中通过src属性传递的变量?这很简单吗?

有帮助吗?

解决方案

<script>
var config=true;
</script>
<script src="myscript.js"></script>

您无法以您尝试的方式将变量传递给JS。 SCRIPT标记不会创建一个Window对象(它有一个查询字符串),它不是服务器端代码。

其他提示

是的,您可以,但您需要知道脚本中的确切脚本文件名:

var libFileName = 'myscript.js',
    scripts = document.head.getElementsByTagName("script"), 
    i, j, src, parts, basePath, options = {};

for (i = 0; i < scripts.length; i++) {
  src = scripts[i].src;
  if (src.indexOf(libFileName) != -1) {
    parts = src.split('?');
    basePath = parts[0].replace(libFileName, '');
    if (parts[1]) {
      var opt = parts[1].split('&');
      for (j = opt.length-1; j >= 0; --j) {
        var pair = opt[j].split('=');
        options[pair[0]] = pair[1];
      }
    }
    break;
  }
}

你现在有一个'options'变量,它传递了参数。我没有测试它,我从 http://code.google.com/p/canvas-text/source/browse/trunk/canvas.text.js 它的工作原理。

您可能已经看到了这一点,但实际上JS文件正在使用PHP或其他语言进行预处理服务器端。服务器端代码将使用变量集打印/回显javascript。我之前看到过一个脚本化的广告服务,它让我看看是否可以使用普通的OL来实现,但它不能。

您需要使用Javascript查找脚本的src属性并在'?'之后解析变量。使用Prototype.js框架,它看起来像这样

var js = /myscript\.js(\?.*)?$/; // regex to match .js

var jsfile = $('head script[src]').findAll(function(s) {
    return s.src.match(js);
}).each(function(s) {
    var path = s.src.replace(js, ''),
    includes = s.src.match(/\?.*([a-z,]*)/);
    config = (includes ? includes[1].split('=');
    alert(config[1]); // should alert "true" ??
});

我的Javascript / RegEx技能很生疏,但这是一般的想法。直接从scriptaculous.js文件中删除!

但是,您的脚本可以找到自己的脚本节点并检查src属性并提取您喜欢的任何信息。

  var scripts = document.getElementsByTagName ('script');
  for (var s, i = scripts.length; i && (s = scripts[--i]);) {
    if ((s = s.getAttribute ('src')) && (s = s.match (/^(.*)myscript.js(\?\s*(.+))?\s*/))) {
      alert ("Parameter string : '" + s[3] + "'");    
      break;
    } 
  }

这是否应该完成,这是一个公平的问题,但如果你想这样做, http://feather.elektrum.org/book/src.html 真的展示了如何。假设您的浏览器在渲染脚本标记时阻塞(当前为真,但未来可能不会证明),相关脚本始终是页面上最后一个脚本。

然后使用一些框架和插件,如jQuery和 http://plugins.jquery.com/project/ parseQuery 这变得非常简单。感到惊讶的是它还没有插件。

有点相关的是John Resig的降级脚本标签,但它在外部脚本之后运行代码,而不是初始化的一部分: http://ejohn.org/blog/degrading-script-tags/

致谢:将参数传递给JavaScript文件将参数传递给JavaScript文件

使用全局变量不是一个干净或安全的解决方案,而是可以使用data-X属性,它更清洁,更安全:

<script type="text/javascript" data-parameter_1="value_1" ... src="/js/myfile.js"></script>

从myfile.js可以访问数据参数,例如使用jQuery:

var parameter1 = $('script[src*="myfile.js"]').data('parameter_1');

显然是“myfile.is”和“parameter_1”必须匹配2个来源;)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top