Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在浏览器中只加载一次多个javascript库?_Javascript_Jquery_Iframe_Etherpad - Fatal编程技术网

如何在浏览器中只加载一次多个javascript库?

如何在浏览器中只加载一次多个javascript库?,javascript,jquery,iframe,etherpad,Javascript,Jquery,Iframe,Etherpad,我在网页上有多个Etherpad实例作为iFrame。Etherpad的ep_tables插件使用YUI库(将近12个不同的JS文件)。这会导致站点加载大量时间,因为每个etherpad实例都会加载这些YUI文件 所以情况是这样的-我只想为第一个etherpad实例加载一次这些YUI文件,而其余实例不应该加载YUI文件,而是以某种方式使用已经加载的YUI文件。我如何实现这一点 PS:每个etherpad实例都是一个iFrame,YUI库是该iFrame中html的一部分。我的意思是,该脚本应该缓

我在网页上有多个Etherpad实例作为iFrame。Etherpad的ep_tables插件使用YUI库(将近12个不同的JS文件)。这会导致站点加载大量时间,因为每个etherpad实例都会加载这些YUI文件

所以情况是这样的-我只想为第一个etherpad实例加载一次这些YUI文件,而其余实例不应该加载YUI文件,而是以某种方式使用已经加载的YUI文件。我如何实现这一点


PS:每个etherpad实例都是一个iFrame,YUI库是该iFrame中html的一部分。

我的意思是,该脚本应该缓存浏览器端,而不是一个问题。如果您检查您喜爱的检查器控制台的网络窗格,只要它从同一位置加载相同的资源。这里的大多数人都会问如何不从缓存加载

但本着发明一些毫无意义的东西的精神,我会这样做:

function addToAllFrames(var scriptName){

    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("GET","scriptName",true);
    xmlhttp.send();
    xmlhttp.onreadystatechange=function(){
       if (xmlhttp.readyState==4 && xmlhttp.status==200){
           script.type = "text/javascript";
           script.src = xmlhttp.responseText;
           var frames= document.getElementsByTagName("iframe");
           for (var x = 0; x < frames.length; x++) {
               frames[x].append(script);
           }
       }
    } 
}
函数addToAllFrames(var scriptName){
xmlhttp=新的XMLHttpRequest();
open(“GET”,“scriptName”,true);
xmlhttp.send();
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
script.type=“text/javascript”;
script.src=xmlhttp.responseText;
var frames=document.getElementsByTagName(“iframe”);
对于(var x=0;x

并为我想固定到iFrame的每个脚本调用它

如果我真的疯了,新的画面被不可控地创造出来。我喜欢这样的东西:

var globalScriptObject={};    
function addToAllFrames(var scriptName){
    if (!globalScriptObject[scriptName].length){
        xmlhttp=new XMLHttpRequest();
        xmlhttp.open("GET","scriptName",true);
        xmlhttp.send();
        xmlhttp.onreadystatechange=function(){
           if (xmlhttp.readyState==4 && xmlhttp.status==200){
                 globalScriptObject[scriptName] = xmlhttp.responseText;
           }
        }
    }
     var frames= document.getElementsByTagName("iframe");
     for (var x = 0; x < frames.length; x++) {
        if (!frames[x].getElementsByName(scriptName).length){
            script.setAttribute('type', 'text/javascript');
            script.setAttribute('src', globalScriptObject[scriptName]);
            script.setAttribute('name', scriptName);
            frames[x].append(script);
         }
     }
}

当您创建iframe时,会有一些东西需要特别查找。如果页面上有其他iFrame


尽管如此,在很多方面都是毫无意义的。依赖缓存。

如果从服务器发送的文件头允许缓存,浏览器应自动为您执行此操作(对于javascript文件,默认情况下通常为是)
if (frames[x].hasAttribute("data-YUI"){
}