如何从脚本标记中读取JS作为数据?

时间:2014-07-04 04:02:07

标签: javascript jquery html

我有一个外部文件(假设是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() {}'

3 个答案:

答案 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)

顺便说一下,这可以在不需要iframesajax的情况下完成。

由于您可以使用外部功能;只需在其上调用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>

&fiddle with it here


可以看出;在某些浏览器中,这种特殊用法或多或少会有效,具体取决于toString()实现。 - this nice little article

中讨论了所有这些问题

另一个警告:这个技巧在Objects上也不能很好地工作,它们不是立即执行的函数或函数(即:RMP)等。