我有一个外部文件(假设是foo.js)
function baz() {}
然后在我的HTML中,我使用脚本标记导入它:
<script type="text/javascript" src="foo.js"></script>
我希望能够从script标签内部获取JS的字符串。我尝试过jquery的html(),以及innerHTML和innerText属性,但它们都返回空字符串。
注意:我正在尝试避免使用AJAX,因为我的服务器很慢,并且即使使用缓存也会减小网页的大小。
编辑: 我想要的字符串将包含javascript文件中的数据,而不是其URL:
getJsData(document.querySelector('script[src="foo.js"]')) == 'function baz() {}'
答案 0 :(得分:2)
我可能不完全明白它是什么以及为什么要实现它。考虑到由于缓慢的服务器问题而您不想使用ajax
,您可以选择旧学校。
如果你的页面不是很重,你可以 -
将隐藏 iframe
放在将src指向JS文件的页面上。
等待在iframe中调用$('document').ready()
,即让iFrame加载所有内容。
将其加载的iframe中的内容复制到所需的HTML元素容器中。
希望这有帮助!
答案 1 :(得分:0)
在脚本标记中放入一个id,并从Jquery选择器中获取该元素,如
<script type="text/javascript" id="my_id" src="foo.js">
</script>
<script>
var my_js_file = $("#my_id").attr("src");
my_js_file.trim(".js");
</script>
答案 2 :(得分:0)
顺便说一下,这可以在不需要iframes
或ajax
的情况下完成。
由于您可以使用外部功能;只需在其上调用toString()
即可。例如:
window.console.log(baz.toString());
这是一个示例,演示了典型的有效理由想要做这种事情&amp;它也有局限性:
var strMod=GameOfLife.toString();
//real shenzi prettification lol
(strMod.indexOf(";var")>-1) && (strMod=strMod.replace(/;/g, ";\t\n"));
var nodeCtr=document.getElementById('code-block');
var nodeCodes=document.createElement("pre");
nodeCodes.classList.add("code-snippet");
nodeCtr.appendChild(nodeCodes);
nodeCodes.innerHTML="var GameOfLife="+strMod;
SyntaxHighlighter.highlight({brush: "js"}, nodeCodes);
body
{
background-color:#131313;
}
a:link,
a:visited
{
color: rgba(185, 176, 218, 0.78);
text-decoration: none;
}
a:hover,
a:focus
{
color: rgba(41, 129, 241, 0.78);
cursor: pointer;
cursor: hand;
text-decoration: underline;
}
#code-block
{
max-width:800px;
overflow:auto;
}
#code-block .syntaxhighlighter
{
margin:20px;
font-size:10px!important;
overflow:visible!important;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/scripts/shCore.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/scripts/shBrushJScript.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/styles/shCore.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/styles/shThemeEmacs.css" rel="stylesheet"/>
<script src="https://cdn.rawgit.com/nomatteus/conway-game-of-life-js/master/gameoflife.js"></script>
<a href="https://github.com/nomatteus/conway-game-of-life-js">
Conways Game of Life ~ js-stylee! ~ by Matthew Ruten
</a>
<div id="code-block"></div>
可以看出;在某些浏览器中,这种特殊用法或多或少会有效,具体取决于toString()
实现。 - this nice little article
另一个警告:这个技巧在Objects
上也不能很好地工作,它们不是立即执行的函数或函数(即:RMP
)等。