2014-07-04 14 views
5

Tôi có một tập tin bên ngoài (giả sử foo.js)Làm cách nào để đọc JS dưới dạng dữ liệu từ thẻ tập lệnh?

function baz() {} 

Sau đó, trong HTML của tôi, tôi nhập nó với các thẻ script:

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

Tôi muốn có thể để có được một chuỗi của JS từ bên trong thẻ script. Tôi đã thử html của jquery(), và các thuộc tính innerHTML và innerText, nhưng tất cả chúng đều trả về các chuỗi rỗng.

Lưu ý: Tôi đang cố gắng tránh AJAX, vì máy chủ của tôi chậm và giảm kích thước của trang web, ngay cả với bộ đệm.

Edit: Chuỗi Tôi muốn nhận được sẽ chứa các dữ liệu trong file javascript, không URL của nó:

getJsData(document.querySelector('script[src="foo.js"]')) == 'function baz() {}' 
+2

gì làm bạn có nghĩa là 'Tôi muốn có thể nhận được một chuỗi các JS từ bên trong của thẻ script.'? – Satpal

+0

http://stackoverflow.com/questions/14904378/get-data-attribute-of-script-tag, hãy xem qua liên kết, câu trả lời đầu tiên có thể cung cấp một số thông tin chi tiết, mặc dù không phải là câu trả lời cho câu hỏi chính xác của bạn. Việc cung cấp một 'id' cho các thẻ script cũng mới đối với tôi. – mane

+0

Bạn đang cố giải quyết vấn đề gì? – jfriend00

Trả lời

2

tôi có thể không chính xác hiểu nó và wh là gì y bạn muốn thực hiện điều này. Xem xét rằng bạn không muốn sử dụng ajax do các sự cố máy chủ chậm, bạn cũng có thể làm điều đó ở trường cũ. Nếu trang của bạn không phải là rất nặng, bạn có thể -

  • Đặt một ẩniframe trên trang chỉ src của nó để tập tin JS của bạn.

  • Đợi $('document').ready() được gọi bên trong iframe, tức là để iFrame tải tất cả nội dung.

  • Sao chép nội dung của khung nội tuyến một nội dung được tải vào vùng chứa phần tử HTML bạn muốn.

Hy vọng điều này sẽ hữu ích!

0

Đặt một id trong thẻ kịch bản và nhận được rằng phần tử từ Jquery selector như

<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>

+0

Điều này sẽ chỉ cung cấp cho bạn 'foo' ... – cumul

0

Ngẫu nhiên, điều này có thể được thực hiện mà không cần iframes hoặc ajax.

Vì chức năng bên ngoài của bạn có sẵn cho bạn; chỉ cần gọi toString() trên đó.ví dụ:

window.console.log(baz.toString()); 

Dưới đây là một ví dụ chứng minh một tiêu biểu lý do chính đáng vì muốn làm điều này loại điều & hạn chế cũng có thể nó là:

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


Như có thể thấy; trong một số trình duyệt, việc sử dụng cụ thể này sẽ hoạt động tốt hơn hoặc ít hơn, tùy thuộc vào việc triển khai toString(). -all trong số đó được thảo luận trong this nice little article

caveat Một: thủ thuật này cũng sẽ không làm việc rất tốt trên Objects mà không phải là chức năng hoặc chức năng mà ngay lập tức thực hiện (ví dụ: RMP) vv

Các vấn đề liên quan