2012-02-24 33 views
6

Có thể thêm hoặc xóa tệp JavaScript và tệp CSS bằng JavaScript tại thời gian chạy không? Nếu JavaScript không thể thực hiện được thì chúng ta có thể thực hiện nó bằng PHP hay bất kỳ ngôn ngữ trang web máy chủ nào khác không?Tải và gỡ bỏ javascript tại thời gian chạy

Thực ra tôi đã thử bởi yep-nope js nhưng tôi không thể tải bất kỳ javascript nào lên nó.

Trả lời

10

Kiểm tra this, thisthis

Từ liên kết hàng đầu, để tự động thêm js hoặc css:

function loadjscssfile(filename, filetype){ 
if (filetype=="js"){ //if filename is a external JavaScript file 
    var fileref=document.createElement('script') 
    fileref.setAttribute("type","text/javascript") 
    fileref.setAttribute("src", filename) 
} 
else if (filetype=="css"){ //if filename is an external CSS file 
    var fileref=document.createElement("link") 
    fileref.setAttribute("rel", "stylesheet") 
    fileref.setAttribute("type", "text/css") 
    fileref.setAttribute("href", filename) 
} 
if (typeof fileref!="undefined") 
    document.getElementsByTagName("head")[0].appendChild(fileref) 
} 

loadjscssfile("myscript.js", "js") //dynamically load and add this .js file 
loadjscssfile("javascript.php", "js") //dynamically load "javascript.php" as a JavaScript file 
loadjscssfile("mystyle.css", "css") ////dynamically load and add this .css file 

Ngoài ra, để tự động loại bỏ js hoặc css:

function removejscssfile(filename, filetype){ 
var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none" //determine element type to create nodelist from 
var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none" //determine corresponding attribute to test for 
var allsuspects=document.getElementsByTagName(targetelement) 
for (var i=allsuspects.length; i>=0; i--){ //search backwards within nodelist for matching elements to remove 
    if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1) 
    allsuspects[i].parentNode.removeChild(allsuspects[i]) //remove element by calling parentNode.removeChild() 
} 
}  
removejscssfile("somescript.js", "js") //remove all occurences of "somescript.js" on page 
removejscssfile("somestyle.css", "css") //remove all occurences "somestyle.css" on page 

Nhưng lưu ý về việc xóa:

Vậy điều gì thực sự xảy ra khi bạn xóa tệp JavaScript hoặc CSS bên ngoài? Có lẽ không hoàn toàn là những gì bạn mong đợi thực sự. Trong trường hợp JavaScript trong khi phần tử được xóa khỏi tài liệu cây, bất kỳ mã nào được tải như một phần của tệp JavaScript bên ngoài vẫn là trong bộ nhớ của trình duyệt. Đó là để nói, bạn vẫn có thể truy cập vào biến, chức năng vv đã được thêm vào khi tập tin bên ngoài đầu tiên nạp

+0

Cảm ơn Mikey Thực ra tôi đã làm như vậy bởi jQuery và nó hoạt động tốt, nhưng tôi đã kiểm tra nó trong firebug nó không hiển thị thẻ script đó là lý do tại sao tôi đã nhầm lẫn. Nhưng chức năng của nó hoạt động như mong đợi :) Cảm ơn một lần nữa – Tarun

1

Có thể thêm hoặc xóa tệp JavaScript và tệp CSS bằng JavaScript tại thời gian chạy không?

Bạn có thể tải JavaScript động, tuy nhiên khi bạn đã tải, bạn không thể tải JavaScript trong trang đang hoạt động. Bạn có thể tải lại trang, thao tác này sẽ xóa các tập lệnh đang hoạt động và bắt đầu lại. Ngoài ra, bạn có thể ghi đè lên các chức năng mà bạn đã thiết lập.

Theo như CSS có liên quan, bạn có thể thêm/xóa <link.../> yếu tố để thêm/xóa biểu định kiểu. Ngoài ra, bạn có thể thêm/xóa <style> các phần tử có thể chứa các quy tắc.

Bạn cũng có thể sử dụng DHTML để sửa đổi bất kỳ kiểu nội tuyến nào trên các phần tử trong trang.

5

Không, bạn không thể làm điều đó. Khi một khối JavaScript được tải trong trình duyệt và được thực hiện, nó sẽ được lưu trữ trong bộ nhớ trình duyệt trong phạm vi của cửa sổ tương ứng. Đó là hoàn toàn không có cách nào để dỡ bỏ nó (mà không làm mới trang/cửa sổ đóng).

Ở mức tối đa, tất cả những gì bạn có thể làm là đặt các biến bất kỳ được đưa vào tệp javascript của bạn vào Null. Nhưng một lần nữa điều này sẽ không loại bỏ hoàn toàn vấn đề, nhưng có, bất kỳ truy cập thêm vào các biến đó sẽ không mang lại kết quả.

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