Javascript 将外部文件添加到头部-一个用于暂存,一个用于生产

Javascript 将外部文件添加到头部-一个用于暂存,一个用于生产,javascript,Javascript,我需要将一个外部javascript文件添加到网站的部分-一个文件在登台服务器上,另一个文件用于生产 到目前为止,我有这个,但我得到一个错误:“return”在函数外部 <script type="text/javascript"> var pathOrigin = window.location.origin; var headtg = document.getElementsByTagName('head')[0]; if (!headtg) {

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

到目前为止,我有这个,但我得到一个错误:“return”在函数外部

<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>

var pathrigin=window.location.origin;
var headtg=document.getElementsByTagName('head')[0];
如果(!headtg){
返回;
}
var linktg=document.createElement('script');
if(pathOrigin.toLowerCase().indexOf(“staging.server.com”)>=0){
linktg.src='/script staging.js';
}否则{
linktg.src='/script production.js';
}
头、子(linktg);
我错过了什么


谢谢。

此代码放在哪里?您确定路径正确吗? 将js文件添加到头部的另一种方法是:

    <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>

....
var pathrigin=window.location.origin;
var路径=”;
if(pathOrigin.toLowerCase().indexOf(“staging.server.com”)>=0){
path='/script staging.js';
}否则{
path='/script production.js';
}
文件。写(“”);
.....
Return-指定函数要返回的值

这意味着您从浏览器获得的错误是正确的。您的
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();
函数getHead(){ var headtg=document.getElementsByTagName('head')[0]; 如果(headtg的类型==‘未定义’){ return;//将中断函数 }否则{ var linktg=document.createElement('script'); if(pathOrigin.toLowerCase().indexOf(“staging.server.com”)>=0){ linktg.src='/script staging.js'; }否则{ linktg.src='/script production.js'; } 头、子(linktg); }; }; getHead();//不要忘记初始化函数 //或者你可以: element.onload/onclick/on=getHead(); 对我来说,还不清楚您想要返回什么,除非您只是想停止脚本执行;引用MDN:

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

资料来源:

注意:请检查为什么使用
typeof
语句比使用简单的
语句更安全标记以检查是否存在某些内容:

EDIT:对于return语句的一个非常简单的用例,您可以检查它基本上是一个计数器,当它达到100时,它将输出一个错误。

<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>
变量路径=window.location.origin var fileref=document.createElement('脚本') fileref.setAttribute(“类型”、“文本/javascript”) 如果(路径==“本地”){ fileref.setAttribute(“src”,”file:///D:/JS/jquery.js') } 否则{ fileref.setAttribute(“src”,”file:///D:/JS/jquery.js') } document.getElementsByTagName(“head”)[0]。appendChild(fileref) //列出所有动态加载的js var scripts=document.getElementsByTagName('script'); console.log(脚本); 试验

要动态加载脚本,您可以尝试以下操作


javascript错误“函数外的返回语句”表示您创建了一个不允许存在于函数定义外的代码片段。

使用此脚本,我在IE中遇到一个错误:无法获取未定义或空引用的属性“toLowerCase”,它显示“origin”IE中不支持。使用window.location.href它可以工作。我从您的代码中获取pathrigin。这里有一个解决办法:好的,谢谢。那么整个代码应该是什么样子呢?我仍然得到函数外的“return”语句。@Meek,这取决于如果
head
标记不存在,您希望返回什么。如果它不存在,是否要附加它?(有点奇怪,因为通常每个HTML文档都有一个
,但ok.)。是否要输出控制台错误?我想我希望脚本停止执行,尽管head不太可能存在。我更新了答案以包含完整代码。在本例中,您只需要return来中断代码,但在基于if-else子句为变量赋值时,最常用return。注意:
函数getHead()
var getHead=function()
相同,这就是为什么您必须在之后初始化它。谢谢您的时间。我将继续此内容。:-)