Javascript 如何更改';src&x27;将脚本复制到远程位置?

Javascript 如何更改';src&x27;将脚本复制到远程位置?,javascript,jquery,Javascript,Jquery,我有一个使用元素加载另一个远程源的页面。一切都很好,除了,现在我希望能够根据加载页面时的特定条件更改脚本的“src”。问题是,当我更改“src”时,即使它在DOM中更改,也没有影响。原始“src”已使用,且从未更新 是否可以动态检索远程站点的源,或者该值必须是常量 编辑:以下是我尝试的示例: <!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jq

我有一个使用元素加载另一个远程源的页面。一切都很好,除了,现在我希望能够根据加载页面时的特定条件更改脚本的“src”。问题是,当我更改“src”时,即使它在DOM中更改,也没有影响。原始“src”已使用,且从未更新

是否可以动态检索远程站点的源,或者该值必须是常量

编辑:以下是我尝试的示例:

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="http://voap.weather.com/weather/oap/90210?

template=GENXV&par=3000000007&unit=0&key=XXX"></script>
<script>
$(document).ready(function(){
  var newS = document.createElement('script');
  newS.type = "text/javascript"; 
  newS.src = "http://voap.weather.com/weather/oap/90210?template=GENXV&par=3000000007&unit=0&key=XXX";
  $("head").append (newS);
});
</script>
</head>
<body>
</body>
</html>

$(文档).ready(函数(){
var newS=document.createElement('script');
newS.type=“text/javascript”;
newS.src=”http://voap.weather.com/weather/oap/90210?template=GENXV&par=3000000007&unit=0&key=XXX";
$(“标题”)。附加(新闻);
});
您会注意到顶部的“脚本”工作正常。我尝试动态添加的脚本根本不起作用。它显示在DOM检查器中,但不显示在页面中

此外,请参见以下内容:

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function(){
  $.getScript("http://w3schools.com/jquery/demo_ajax_script.js");
  $.getScript("http://voap.weather.com/weather/oap/90210?template=GENXV&par=3000000007&unit=0&key=XXX");
});
</script>
</head>
<body>
</body>
</html>

$(文档).ready(函数(){
$.getScript(“http://w3schools.com/jquery/demo_ajax_script.js");
$.getScript(“http://voap.weather.com/weather/oap/90210?template=GENXV&par=3000000007&unit=0&key=XXX");
});

在本例中,w3school示例起作用,但天气不起作用。

您使用的是jQuery,所以请使用
getScript


如果您已经包含了汽车工厂,请不要重新设计轮子。

脚本未加载,因为它返回的是文本/html标题。它需要与application/x-javascript的Content-Type头一起提供和返回

如果您无法控制脚本所使用的标题,那么我建议您联系提供商,请求他们更改这些标题

现在它给出了一个警告:

Resource interpreted as Script but transferred with MIME type text/html: "http://voap.weather.com/weather/oap/90210?template=GENXV&par=3000000007&unit=0&key=XXX&_=1387307745041"
用这把小提琴来看看你自己:

#

如何摆弄
元素,并使用它来执行xrequests

I方法(核心方法):

window.onload之后执行
document.write()
操作会在运行之前清除所有已加载的内容。异步脚本加载使用的是“document.write”,浏览器不太喜欢它(请查看从异步加载的外部脚本调用document.write(),该调用已被忽略。控制台中出现错误)。 像这样的东西可能是():


这里发生了两件事:

  • 远程服务器返回了错误的内容类型
  • 远程服务器返回的脚本正在使用document.write
  • 第一个问题似乎意味着您无法使用$.getScript获取远程脚本。但是,即使可以,您也不会希望这样做,因为第二个问题是,在文档准备好后,您无法在顶级文档中运行weather.com中的脚本,除非您希望销毁整个页面并用天气数据替换它

    但是,您可以使用自己的document.write在文档加载完成之前动态插入脚本标记(不要使用$(function(){})、$(document).ready(function(){})或文档就绪事件处理程序的任何其他变体包装它:

    <script type="text/javascript">
    document.write('<script src="http://voap.weather.com/weather/oap/90210?template=GENXV&par=3000000007&unit=0&key=XXX">' + '<\/script>');
    </script>
    
    
    文件。写入(“”+“”);
    

    如果需要,您可以使用一些动态逻辑来构建这些字符串参数。

    上述大多数答案清楚地表明您正在跨域访问内容,并且 返回类型是text/html而不是jsonp,这本可以解决这个问题

    似乎您只使用该服务而不设计它,这就是为什么您不能更改脚本的响应

    有一种解决方案,您可以像这样在html中包含所有可能的脚本

    <body>
      <div id="script1">
        <script src="{url of script 1}"></script>
      </div>
    
      <div id="script2">
        <script src="{url of script 2}"></script>
      </div>
    
      <div id="script3">
        <script src="{url of script 3}"></script>
      </div>
    </body>
    
    
    
    根据您的操作,只显示所需的div并隐藏其他div 因为通常我们可以更改脚本的scr值,但它不会从该URL加载新内容


    因此,策略将加载所有脚本,然后仅显示其中一个

    您能否提供更多详细信息,说明您为什么要这样做?为什么不创建另一个脚本元素呢?您应该只加载特定的脚本。更改脚本标记的src不会卸载以前加载的脚本,也不会加载新的脚本。我可以只添加一个新脚本,事实上,我更喜欢它。然而,我已经编辑了这个问题来显示我的问题。哇。view source:是我多年来见过的最差的javascript
    document.write
    是JS早期的过时JS调用,在任何情况下都不应再使用。也不是5年前的事了。你不能在页面加载后将脚本附加到页面上。原因是,它写得很糟糕。Adidng该页面的脚本将导致页面的html被覆盖!迈克,很遗憾,getScript也不起作用。尽管如此,我的方法和getScript都可以与URL一起工作:有没有理由它不能与我在问题中提供的URL一起工作?请检查浏览器的错误控制台。这两种方法都应该有效,因此您正在加载的文件可能不是正确的javascript。我收到的唯一错误是:资源被解释为脚本,但使用MIME类型text/htmlHey传输,请看这个问题,它似乎类似。也许加载的脚本有问题,jQuery只是吞下了一个异常。这正是我想要的。我假设,因为我在准备好之前没有运行JQuery,所以可以保证这个脚本会在我的JQuery之前运行,对吗?也就是说,准备过程的一部分是完成其他脚本,对吗?只要包含jQuery的脚本标记在这个脚本标记之前,那么您就可以使用jQuery,但某些事情可能不起作用(比如选择文档后面的元素)。等待文档准备就绪可确保DOM已准备就绪,并且所有外部脚本都已准备就绪
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>x</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script>
      $(function () {
      var widg$ = $("#widg");
      $("#btn")
        .on({
          click: function () {
            $.ajax({
                url       :'_xdread.php', 
                type      :'post', 
                dataType  :'text', 
                data      :{ 
                            fetch_url  :'http://voap.weather.com/weather/oap/90210?template=GENXV&par=3000000007&unit=0&key=XXX', 
                            url_mime   :'text/plain'
                          }, 
                success:function ( jstxt ) { 
                  //console.log( jstxt );
                  widg$[0]
                  .contentWindow
                  .eval( jstxt );
                }
          });
          }
        });
    });
    </script>
    </head>
    <body>
    <button id="btn" style="display:block;">load</button>
    <iframe 
      id="widg"
      src=""
      frameborder="0" 
      style="margin:0; padding:0; border:none; width:200px; height:300px;" 
      seamless 
    ></iframe>
    </body>
    </html>
    
    <script type="text/javascript">
    document.write('<script src="http://voap.weather.com/weather/oap/90210?template=GENXV&par=3000000007&unit=0&key=XXX">' + '<\/script>');
    </script>
    
    <body>
      <div id="script1">
        <script src="{url of script 1}"></script>
      </div>
    
      <div id="script2">
        <script src="{url of script 2}"></script>
      </div>
    
      <div id="script3">
        <script src="{url of script 3}"></script>
      </div>
    </body>