2010-06-21 46 views
14

Tôi muốn xóa khối Google Analytics này bằng cách sử dụng jQuery.Xóa <script> thẻ bằng cách sử dụng jQuery

<script type="text/javascript"> 
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); 
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); 
</script> 
<script type="text/javascript"> 
    try { 
     //var pageTracker = _gat._getTracker("xxx"); 
     pageTracker._trackPageview(); 
    } catch(err) {} 
</script> 

LÝ DO

Bởi vì tôi đang tạo ra một bespoke trình đọc màn hình chuyển đổi cho jQuery dựa trên một đặc điểm kỹ thuật của khách hàng. Đó là Google Analytics đang làm tôi thất vọng.

CÁC VẤN ĐỀ

Nó hoạt động với .remove() cho đến khi bạn điều hướng đi, sau đó nhấn lại. Google Analytics bị treo.

+5

Bạn có thể xóa các phần tử, nhưng tôi không nghĩ rằng điều này sẽ làm những gì bạn muốn ... tập lệnh sẽ chạy vào thời điểm đó. –

+0

Bạn đang cố xác thực dữ liệu biểu mẫu? Nếu vậy, điều này sẽ không ngăn chặn kẻ tấn công. Xác thực phía máy chủ là cần thiết. – ceejayoz

+0

Không, tôi đang tạo một số chức năng đọc màn hình dựa trên Javascript riêng biệt. –

Trả lời

7

Hãy thử điều này:

var replacementDoneIn = $(document.body).text(); //remove Google Analytics document.write line 
     var regExMatch = /document\.write\(unescape/g; 
     var replaceWith = "//document.write"; 
     var resultSet = replacementDoneIn.replace(regExMatch, replaceWith); 
     $("body").html(resultSet); 

Hy vọng rằng sẽ giúp!

+3

Hoàn hảo, nhưng điều này không loại bỏ EVERY instance của 'document.write (unescape' nhưng điều đó là tốt cho những gì tôi cần cho thời điểm này. –

+3

Lưu ý rằng thao tác này cũng sẽ xóa tất cả các sự kiện khỏi trang. – David

+7

haha, Davids nhận xét như thế nào nhận được 3 upvotes khi tôi nói tôi tốt 8 tiếng trước đây? - người dùng stackoverflow ngẫu nhiên:) –

0

Để thực sự xóa các phần tử, jQuery('script:not([src^=http])').remove() sẽ hoạt động.

+1

Không, tôi e rằng điều này không hoạt động được. < –

+0

Ý của bạn là từ chế độ xem Nếu không, không có giải pháp nào trong JS, tuy nhiên, nó không loại bỏ bất kỳ khối script nào mà không có 'src' từ dom Nếu bạn muốn xóa tất cả, chỉ cần sử dụng' jQuery ('script'). remove() ' –

+0

Điều này loại bỏ tất cả các thẻ script mặc dù, tôi chỉ muốn loại bỏ một ... –

2

Bạn cũng có thể treo document.write và kiểm tra xem mã anlytics google của nó trước khi dừng nó như thế này:

<script> 
// Must run before google analytics though 
old_document_write = document.write; 
document.write = function(str) 
{ 
    if(/* determine if the str is google analyic code */) 
     return false; // dont write it 
    else 
     old_document_write(str); 
} 
</script> 
1

Vì vậy, công việc này như bạn hy vọng. Ít nhất tôi nghĩ rằng nó sẽ:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("script").each(function() { 
      if (this.innerHTML.length > 0) { 
       var googleScriptRegExp = new RegExp("var gaJsHost|var pageTracker"); 
       if (this.innerHTML.match(googleScriptRegExp) && this.innerHTML.indexOf("innerHTML") == -1) 
        $(this).remove(); 
      } 
     }); 
    }); 
</script> 

Chỉ để giải thích. Tôi lặp qua tất cả các thẻ tập lệnh trên trang. Nếu thuộc tính innerHTML của chúng có độ dài lớn hơn 0 thì tôi kiểm tra innerHTML của tập lệnh và nếu tôi tìm thấy chuỗi var gaJsHost hoặc var pageTracker trong đó. Sau đó tôi chắc chắn rằng tôi cũng không thấy innerHTML trong đó vì kịch bản của chúng ta rõ ràng sẽ có những thứ này trong đó. Tất nhiên trừ khi bạn có mã này trong một kịch bản nạp trên trang sử dụng src trong trường hợp kịch bản này sẽ không có một bộ thuộc tính innerHTML và bạn có thể thay đổi nếu dòng chỉ được

if (this.innerHTML.match(googleScriptRegExp)) 

Hy vọng điều này là những gì bạn đang tìm kiếm.

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