2012-06-22 59 views
18

Tôi muốn sử dụng biến javascript làm thuộc tính 'src' cho một thẻ khác trên cùng một jsp.Sử dụng biến JS để đặt thuộc tính src cho <script> thẻ

<script> 
var link = mylink // the link is generated based on some code 
</script> 

Tôi muốn tạo phần tử mới này như được hiển thị bên dưới.

<script src="mylink"> 
</script> 

Khi tìm kiếm các diễn đàn khác nhau, tôi đã thử sử dụng các tùy chọn sau nhưng dường như chúng không hoạt động. Tôi muốn điều này hoạt động trên tất cả các trình duyệt chính.

  1. Đặt mã này vào phần tử đầu tiên.

    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    script.src = "path/to/somelink"; 
    document.body.appendChild(script); 
    
  2. Sử dụng phương pháp ghi tài liệu trong phần tử đầu tiên.

    document.write("<script type='text/javascript' src="+ google.com + "><\/script>"); 
    
  3. Đã cố gắng đặt JSTL Biến trong thành phần đầu tiên và sử dụng nó.

    <c:set var="URL" value="mylink"/> 
    

Không ai trong số những cách đã thành công. Bất kỳ đề xuất về những gì đang xảy ra sai?

+1

Có một kịch bản phổ biến tải tiện ích gọi là require.js. Nó tối ưu hóa tải tập lệnh và phụ thuộc bằng cách thực hiện cuộc gọi đồng bộ không đồng bộ. Điều này có thể được quan tâm. –

+0

Nếu bạn có câu trả lời, bạn nên chấp nhận một trong các giải pháp. :) hoặc cung cấp câu trả lời mà bạn thấy hữu ích. – Mahesh

Trả lời

4

Tôi sử dụng thứ gì đó tương tự như lựa chọn hai. Có một lỗi nhỏ trong mã của bạn vì "google.com" cần được bao quanh bởi dấu ngoặc kép.

Để cải thiện khả năng tương thích, bạn có thể muốn viết nó như:

document.write("<script type='text/javascript' src='"+ x + "'><\/scr" + "ipt>"); 

Trong tình huống này, x sẽ là tập tin được bao gồm. Bạn có thể xác định nó như:

var x = "http://google.com/script.js"; 

HOẶC

var x = "path/to/script.js"; 
+0

tôi đã thử cách này với các dấu ngoặc kép, nhưng nó không hoạt động, không thể thấy kịch bản được thêm vào trong mã nguồn. cũng không hiểu tại sao bạn nói chúng ta cần phải làm như "'><\/scr" + "ipt>"? bất kỳ ý nghĩa nào tại sao chúng ta liên kết ở đây? – 1985percy

+0

Một số trình duyệt, đặc biệt là các phiên bản cũ của Internet Explorer, cho rằng đây là phần cuối của thẻ '

2

Hãy thử:

(function(d){ 
    var file = 'yourJS.js'; 
    var ref = d.getElementsByTagName('script')[0]; 
    var js = d.createElement('script'); 
    js.src = file; 
    ref.parentNode.insertBefore(js, ref); 
}(document)); 

Điều này không:

  1. Tìm các yếu tố kịch bản đầu tiên trên trang của bạn
  2. Tạo thành phần tập lệnh mới với nguồn được cung cấp của bạn.
  3. Sau đó, chèn phần tử mới đó trước phần tử tập lệnh hiện có đầu tiên.
12

Mặc dù CDATA hoạt động tốt, sử dụng document.createElement cũng là một lựa chọn tuyệt vời .. Đặc biệt là nếu bạn có ý định thêm một số giá trị cho một URL, nói cho bộ nhớ cache phá sản ..

<script type="text/javascript"> 
    var JSLink = "/Folder/sub_folder/version.js?version=" + Math.random(); 
    var JSElement = document.createElement('script'); 
    JSElement.src = JSLink; 
    JSElement.onload = OnceLoaded; 
    document.getElementsByTagName('head')[0].appendChild(JSElement); 

    function OnceLoaded() { 
     // Once loaded.. load other JS or CSS or call objects of version.js 
    } 
</script> 

Mã cũng .. :)

+0

cách bout nếu tôi cần tải nhiều tệp js. là có một cú pháp cụ thể, hay tôi phải lặp lại toàn bộ kịch bản này? cảm ơn !! – ChickenWing24

+0

Lặp lại toàn bộ tập lệnh .. Bất kỳ mã nào bạn viết về cơ bản sẽ làm điều đó. Xin lỗi vì trả lời muộn. – Mahesh

+0

không phải lo lắng. cảm ơn! : D – ChickenWing24

0
<xsl:variable name="Path" select="/root/folder/"></xsl:variable> <!-- Global path variable. --> 
<xsl:variable name="myScriptPath" select="concat($Path, 'myScript.js')"></xsl:variable> <!-- Relative script path variable. --> 
<script src="{$myScriptPath}"/> <!-- Attach script. --> 
Các vấn đề liên quan