Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.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_Html_Dom_Scripting - Fatal编程技术网

使用Javascript获取脚本文件的内容

使用Javascript获取脚本文件的内容,javascript,html,dom,scripting,Javascript,Html,Dom,Scripting,我的网页中有以下脚本元素: <script src="default.js" type="text/javascript"></script> 使用JavaScript,我希望能够检索脚本文件的内容。我知道我可以使用ajax请求来获取数据,但随后我从本地已有的服务器获得了一些东西 所以我更愿意做的是从DOM中检索内容(如果可能的话)或具有相同结果的内容 干杯 安东尼 更新 我试图简化这个问题,也许这是个坏主意,我认为这样可以减少问题 我的真实情况如下,我确实有 &l

我的网页中有以下脚本元素:

<script src="default.js" type="text/javascript"></script>

使用JavaScript,我希望能够检索脚本文件的内容。我知道我可以使用ajax请求来获取数据,但随后我从本地已有的服务器获得了一些东西

所以我更愿意做的是从DOM中检索内容(如果可能的话)或具有相同结果的内容

干杯 安东尼

更新

我试图简化这个问题,也许这是个坏主意,我认为这样可以减少问题

我的真实情况如下,我确实有

<script type="text/html" class="jq-ItemTemplate_Approval">
   ...
   html template that is going to be consumed by jQuery and jTemplate
   ...
</script>

...
jQuery和jTemplate将使用的html模板
...
现在这很好,但这意味着每次加载页面时,我都必须将模板作为主页HTML的一部分发送下来。所以我的计划是做以下几件事:

<script src="template.html" type="text/html"></script>

这意味着浏览器将缓存template.html的内容,而我不必每次都发送它。但要做到这一点,我需要能够从文件中获取内容


同样在这种情况下,据我所知,通过ajax请求内容不会有多大帮助,因为它必须返回服务器才能获取内容。

JavaScript文件中有什么?如果是实际代码,您可以在其中运行函数和引用变量,就像将它们剪切并粘贴到网页中一样。您需要将include行放在引用它的任何脚本块之上


这就是您希望实现的目标吗?

除非您将脚本作为文本加载到页面中,否则它不会作为文本存在。它由浏览器解释,并与任何其他脚本融合到运行时中

如果需要源代码,则必须再次获取它,如果使用Ajax,则获取responseText


它将来自浏览器缓存,无需再次下载。

如果我理解正确,您不希望使用Ajax加载html模板文本,而是将其与页面的其余部分一起加载。如果控制服务器端,则始终可以将模板文本包含在不可见的div标记中,然后从Javascript引用该标记:

<div id="template" style="display:none;">
...template text...
</div>
<script>
// pops up the template text.
alert(document.getElementById("template").innerHTML);
</script>

我认为您要做的是在template.js中分配一个变量。然后,您就可以在jquery中的任何地方使用该变量。比如:

var tpl = "<div> ... </div>"
var tpl=“…”
对于你的问题,这不是一个更简单的解决方案吗?我们在ExtJS中这样做。我认为这在jQuery中适用。

为什么不使用Ajax(好吧,Ajah,因为它的html:-)


当服务器设置正确且未发送“无缓存”或“过期”标题时,浏览器将对其进行缓存。

您可以获取脚本的src属性,然后使用XHR获取JS文件的内容。在国际海事组织,这是一种更干净的方法。例如:-

if(window.XMLHttpRequest) {
                var xhr = new XMLHttpRequest();         
                xhr.onreadystatechange = function() {
                    if(xhr.status == 200 && xhr.readyState == 4) {
                        var sourceCode = xhr.responseText;
                                            alert('The source code is:-\n'+sourceCode);
                    }
                }
                xhr.open("GET",document.getElementById('scriptID').src,true);
                xhr.send(null);
            }
使用iFrame&HTML5本地存储 保存模板以便以后渲染

没有对iFrame感到兴奋,但它似乎工作得很好(还没有运行性能测试)


将iFrame放在您想要模板的页面上(index.html)

window.localStorage.getItem('users_template')

大多数JavaScript导入文件的工作方式是,它们包含一个脚本,该脚本使用特定文本或其他函数的参数立即调用函数。为了更好地进行说明,假设您有主index.html文件,请将其设置为:

<script>
var template = "template text..";
</script>
<html>
<head>
</head>
<body>
<script>
let modules = {};
function started(moduleName, srcTxt) {
    modules[moduleName] = (srcTxt) //or something similar
}
</script>

<!--now you can include other script tags, and any script tags that will be included, their source can be gotten (if set up right, see later)-->

<script src="someOtherFile.js"></script>
</body>
</html>

现在,您可以访问函数的内部内容,获取注释之间的所有文本,或者更好,然后执行其他解析等,或者在注释的开头和结尾制作其他类型的解析标识符,如上所示,并获取这些之间的所有文本。我可以问一下您为什么要这样做吗?如果可以(您不能)通过一个text/html类型的脚本包含它,那么浏览器也必须返回到服务器。XMLHttpRequest并没有什么神奇的地方可以阻止缓存。如果是这样的话,我可以把这个“”放在页面顶部,然后通过ajax调用template.html,让它使用以前得到的缓存版本吗?是的,我确实想到了这一点,但问题是我必须进行大量的转义。比如,如果模板只有5行长,那么如果需要,进行转义也不算太糟糕。但是如果它超过300行,那么维护起来就有点困难了。你们怎么解决这个问题?我在ExtJS中使用过大小合理的模板。如果你想编码300多行,写一个简单的工具来转义HTML文本。有很多选择。将template.html转换为template.js,并转义html文本。使用ruby的一个简单方法是使用CGI.escape(str),其中str是从template.html读取的。这种方法可能是你最好的选择。或者使用一个预先存在的工具,比如最后我使用了这种方法,我编写了一个简短的脚本,从一个文本区域转义并将html内容转移到另一个文本区域,以帮助简化操作。感谢您提出的要点:1)我可以这样做,但它不会利用浏览器缓存外部引用文件的功能。我的一些模板超过300行。因此,能够将其放入一个外部文件并将其缓存是一个巨大的优势。2) 请看我对Ryan Oberoi所说的3)是的,这是一个非常小的问题,问题是在客户端页面生命周期中发生这种情况的时间。如果我有一个像“”这样的外部文件,它将与任何其他外部引用并行加载(假设我将所有脚本引用放在页面底部)。这意味着,如果我将所有模板声明如下“”,浏览器将非常高效地加载这些模板。另外,如果我使用$(document.ready(…),则在加载模板之前,我的任何JS都不会运行。如果我通过ajax进行加载,我的javascript在尝试获取模板之前已经运行了一半,而我必须保持u
<body onload="localStorage.setItem('users_template',this.document.body.innerHTML);"> 
  <ul class="list-group" id="users" >
    {{#users}}<li>{{name}}</li>{{/users}}
  </ul>
</body>
localStorage.getItem('users_template')  
window.localStorage.getItem('users_template')
<html>
<head>
</head>
<body>
<script>
let modules = {};
function started(moduleName, srcTxt) {
    modules[moduleName] = (srcTxt) //or something similar
}
</script>

<!--now you can include other script tags, and any script tags that will be included, their source can be gotten (if set up right, see later)-->

<script src="someOtherFile.js"></script>
</body>
</html>
started("superModule", (function() {
    /*
    <?myCustomTemplateLanguage
    <div>
    {something}Entire Javascript / html template file goes here!!{/something}
    </div>
    ?>
    */
}).toString());