将外部文件添加到head - 一个用于Staging,一个用于Production

时间:2014-01-13 11:50:05

标签: javascript

我需要将一个外部javascript文件添加到网站的<head>部分 - 一个文件在Staging服务器上,另一个文件用于生产。

到目前为止,我有这个,但我收到了一个错误:&#39;返回&#39;功能之外

<script type="text/javascript">
    var pathOrigin = window.location.origin;
    var headtg = document.getElementsByTagName('head')[0];
        if (!headtg) {
            return;
        }
    var linktg = document.createElement('script');
        if (pathOrigin.toLowerCase().indexOf("staging.server.com") >= 0) {
            linktg.src = '/script-staging.js';
        } else {
            linktg.src = '/script-production.js';
        }
headtg.appendChild(linktg);
</script>

我错过了什么?

感谢。

3 个答案:

答案 0 :(得分:1)

这个代码放在哪里?你确定路径是正确的吗? 将js文件添加到head中的另一种方法是这种方法:

    <head>
    ....
    <script type="text/javascript">
    var pathOrigin = window.location.origin;
    var path = "";
    if (pathOrigin.toLowerCase().indexOf("staging.server.com") >= 0) {
        path  = '/script-staging.js';
    } else {
        path  = '/script-production.js';
    }
    document.write( '<script type="text/javascript" src="' + path + '"><\/script>' );
   </script>
   .....
   </head>

答案 1 :(得分:1)

  

返回 - 指定函数返回的值。

这意味着您从浏览器获得的错误是正确的。您的return语句不是函数的一部分,而是全局范围的一部分。您必须跳过使用return语句并使用简单的变量分配,如@ Azzy的答案,或将其封装在如下函数中:

function getHead() {
  var headtg = document.getElementsByTagName('head')[0];
    if (typeof headtg === 'undefined') {
      return; // will break the function
    } else {
       var linktg = document.createElement('script');
       if (pathOrigin.toLowerCase().indexOf("staging.server.com") >= 0) {
         linktg.src = '/script-staging.js';
       } else {
         linktg.src = '/script-production.js';
       }
    headtg.appendChild(linktg);
    };
};
getHead(); // don't forget to initialize the function
//or you could do:
element.onload/onclick/on<whatever_event> = getHead();

对我来说,除非你只想停止脚本执行,否则你还不清楚要返回什么;来自MDN:

  

如果省略return [expression]中的表达式,则返回undefined。

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/return

注意:请检查为什么使用typeof语句比使用简单的!标记更安全来检查是否存在某些内容:Check if object exists in JavaScript

编辑:对于return语句的一个非常简单的用例,你可以查看this fiddle I made,它基本上是一个计数器,当它达到100时会输出错误。

答案 2 :(得分:0)

<html>
<head>
<script type='text/javascript'>
var path = window.location.origin
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript")

if (path == 'local'){
    fileref.setAttribute("src", 'file:///D:/JS/jquery.js')  
}
else{
   fileref.setAttribute("src", 'file:///D:/JS/jquery.js')
}
document.getElementsByTagName("head")[0].appendChild(fileref)

//list all the js loaded dynamically
var scripts = document.getElementsByTagName('script');
console.log(scripts);

</script>

</head>
<body>
<p>test</p>
</body>
</html>

要动态加载脚本,您可以试试这个..

javascript错误“函数外部的return语句”意味着您已经创建了一个不允许存在于函数定义之外的代码片段。