Hướng dẫn how do you inject a script in html? - làm thế nào để bạn đưa một tập lệnh vào html?

6

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang cố gắng xây dựng một số công cụ tiện ích nhỏ mà quản trị web có thể nhúng vào trang web của họ.

Có cách nào mà WebMaster có thể chỉ cần tải công cụ này bằng cách bao gồm một tập lệnh như thế này không?

<script src="http://mysite/widget.js"></script>

Tôi đã cố gắng tiêm nó bằng cách tải nó vào Ajax và sau đó thực hiện appendChild() trên cơ thể, nó hoạt động theo cách này nhưng JS không được thực thi.

Nội dung được tiêm:

<div>one div</div>
<script>alert('some js')</script>

widget.js

function load(content) {
  var $body = document.body,
      $div = document.createElement("div");
  $div.id = "widget";
  $div.innerHTML = content; 
  $body.appendChild($div);
}

Biến nội dung chứa HTML và JS nhưng JS không được thực thi khi được tiêm.

Nhan

3.5586 huy hiệu vàng31 Huy hiệu bạc37 Huy hiệu đồng6 gold badges31 silver badges37 bronze badges

Đã hỏi ngày 22 tháng 11 năm 2016 lúc 6:01Nov 22, 2016 at 6:01

3

Vì bạn không biết tập lệnh của mình sẽ được thêm vào ở đâu - vào đầu hoặc thẻ cơ thể - và do đó khi nó sẽ được thực thi, bạn cần đảm bảo rằng DOM đã sẵn sàng, vì vậy:

 function load(content) {

    if (document.readyState === "complete" || document.readyState === "loaded") {
         // manipulate DOM
    } else {
       document.addEventListener('DOMContentLoaded', function() {
        // manipulate DOM
    })
}

Ngoài ra, vì các thành phần tập lệnh được thêm vào bằng cách sử dụng

<div>one div</div>
<script>alert('some js')</script>
0 không được thực thi, bạn phải sử dụng
<div>one div</div>
<script>alert('some js')</script>
1 hoặc tốt hơn là tạo tập lệnh như thế:

var s = document.createElement('script');
s.text = "alert(\"hi\");"
document.getElementsByTagName('head')[0].appendChild(s);

Tuy nhiên, không có điểm nào để thêm thẻ

<div>one div</div>
<script>alert('some js')</script>
2 để thực thi một số tập lệnh trong mẫu của bạn, vì tập lệnh của bạn đã chạy khi bạn thêm DOM, vì vậy hãy thực hiện tất cả các thiết lập cần thiết ở đó.

Đã trả lời ngày 22 tháng 11 năm 2016 lúc 6:23Nov 22, 2016 at 6:23

Hướng dẫn how do you inject a script in html? - làm thế nào để bạn đưa một tập lệnh vào html?

Max Koretskyimax KoretskyiMax Koretskyi

96.6K53 Huy hiệu vàng314 Huy hiệu bạc463 Huy hiệu Đồng53 gold badges314 silver badges463 bronze badges

7

CẬP NHẬT

Vui lòng xem câu trả lời của Maximus.


Phải, InnerHTML bản địa mặc định không thực hiện JS vì lợi ích an toàn.

jQuery hoặc zepto $ .fn.append () có thể đáp ứng nhu cầu của bạn, đây là lý do (từ mã nguồn zepto)

if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&
           (!el.type || el.type === 'text/javascript') && !el.src)
          window['eval'].call(window, el.innerHTML)

Bạn có thể thấy trong hàm $. Bạn có thể cần

<div>one div</div>
<script>alert('some js')</script>
1, nhưng hãy cẩn thận vì một số quản trị web có thể cung cấp mã 'phó'

Đã trả lời ngày 22 tháng 11 năm 2016 lúc 6:20Nov 22, 2016 at 6:20

Hướng dẫn how do you inject a script in html? - làm thế nào để bạn đưa một tập lệnh vào html?

Jiajianrongjiajianrongjiajianrong

7966 Huy hiệu bạc23 Huy hiệu Đồng6 silver badges23 bronze badges

4

Hướng dẫn how do you inject a script in html? - làm thế nào để bạn đưa một tập lệnh vào html?

Là nhà phát triển và người dùng Internet, chúng tôi thường bắt gặp các trang web hiển thị nhiều cửa sổ bật lên, từ các yêu cầu đăng ký đến các khoản thanh toán, quảng cáo đến thông báo, v.v.

Nhiều lần, chúng tôi sử dụng các trang web đó hàng ngày cho tất cả các loại, và thấy những cửa sổ bật lên đó đã cũ!

Các nhà phát triển có thể hiểu được những điều này bằng cách truy cập bảng điều khiển và tìm các bộ chọn để thao tác mô hình đối tượng tài liệu (DOM) của trang web bằng cách thêm hoặc sửa đổi CSS hoặc JavaScript.

Nhưng bây giờ, nhờ Google Chrome và cửa hàng mở rộng của nó, bất kỳ ai cũng có thể tự động tiêm mã vào bất kỳ trang web nào. Chúng ta sẽ trải qua quá trình từng bước trong hướng dẫn nhỏ này.

1. Cài đặt tiện ích mở rộng để tiêm mã

Điều sau đây chỉ áp dụng nếu bạn sử dụng Google Chrome. Cài đặt JavaScript tùy chỉnh mở rộng cho các trang web. Tiện ích mở rộng nhỏ này cho phép bạn tự động chạy JavaScript trên bất kỳ trang web nào và nó lưu mã cho các lượt truy cập trong tương lai trong trình duyệt web của bạn.

Đầu tiên, hãy truy cập trang web với các cửa sổ bật lên khó chịu mà bạn sử dụng thường xuyên. Đối với hướng dẫn này, tôi đang sử dụng trang web Washington Post,:

Hướng dẫn how do you inject a script in html? - làm thế nào để bạn đưa một tập lệnh vào html?
Ảnh chụp màn hình cho thấy trang web của Washington Post, với một bài viết đề cập đến Andrew Yang, cũng là các công cụ phát triển của Chrome.

2. Định vị các yếu tố DOM và tạo mã tiêm

Mở các công cụ nhà phát triển Chrome của bạn bằng cách nhấn F12, sau đó xác định phần tử với cửa sổ bật lên.

Trong ví dụ này, phần tử

<div>one div</div>
<script>alert('some js')</script>
5 có ID
<div>one div</div>
<script>alert('some js')</script>
6 chứa cửa sổ bật lên với một số nền mờ dần ở phía sau.

Bây giờ, chúng tôi sẽ sử dụng một đoạn trích JavaScript nhỏ để thêm CSS tùy chỉnh và kiểm tra xem chúng tôi có thể ẩn bật lên không.

/* DOM Manipulation
* If you want to update / add single style in DOM Element style attribute you can use this function:
* inject javascript after page reloads.
*/

function setCssStyle(el, style, value) {
  var result = el.style.cssText.match(new RegExp("(?:[;\\s]|^)(" +
      style.replace("-", "\\-") + "\\s*:(.*?)(;|$))")),
    idx;
  if (result) {
    idx = result.index + result[0].indexOf(result[1]);
    el.style.cssText = el.style.cssText.substring(0, idx) +
      style + ": " + value + ";" +
      el.style.cssText.substring(idx + result[1].length);
  } else {
    el.style.cssText += " " + style + ": " + value + ";";
  }
}
var element = document.getElementById("wallIframe");
setCssStyle(element, "display","none !important");

Như bạn có thể thấy, trong mã trên, chúng tôi đang nêu bật phần tử

<div>one div</div>
<script>alert('some js')</script>
6 và ẩn nó bằng cách thêm CSS nội tuyến.

3. Kiểm tra mã tiêm

Kiểm tra mã của bạn trong bảng điều khiển của nhà phát triển Chrome để đảm bảo rằng nó hoạt động.

Hướng dẫn how do you inject a script in html? - làm thế nào để bạn đưa một tập lệnh vào html?
Ảnh chụp màn hình cho thấy trang web của Washington Post, với một bài viết đề cập đến Andrew Yang, cũng là các công cụ phát triển của Chrome.

2. Định vị các yếu tố DOM và tạo mã tiêm

Mở các công cụ nhà phát triển Chrome của bạn bằng cách nhấn F12, sau đó xác định phần tử với cửa sổ bật lên.

Trong ví dụ này, phần tử

<div>one div</div>
<script>alert('some js')</script>
5 có ID
<div>one div</div>
<script>alert('some js')</script>
6 chứa cửa sổ bật lên với một số nền mờ dần ở phía sau.

Hướng dẫn how do you inject a script in html? - làm thế nào để bạn đưa một tập lệnh vào html?
Ảnh chụp màn hình cho thấy trang web của Washington Post, với một bài viết đề cập đến Andrew Yang, cũng là các công cụ phát triển của Chrome.

2. Định vị các yếu tố DOM và tạo mã tiêm

Mở các công cụ nhà phát triển Chrome của bạn bằng cách nhấn F12, sau đó xác định phần tử với cửa sổ bật lên.

Trong ví dụ này, phần tử

<div>one div</div>
<script>alert('some js')</script>
5 có ID
<div>one div</div>
<script>alert('some js')</script>
6 chứa cửa sổ bật lên với một số nền mờ dần ở phía sau.

setTimeout(
     function() {
       function setCssStyle(el, style, value) {
         var result = el.style.cssText.match(new RegExp("(?:[;\\s]|^)(" +
             style.replace("-", "\\-") + "\\s*:(.*?)(;|$))")),
           idx;
         if (result) {
           idx = result.index + result[0].indexOf(result[1]);
           el.style.cssText = el.style.cssText.substring(0, idx) +
             style + ": " + value + ";" +
             el.style.cssText.substring(idx + result[1].length);
         } else {
           el.style.cssText += " " + style + ": " + value + ";";
         }
       }
       
       var element = document.getElementById("wallIframe");
       setCssStyle(element, "display", "none !important");
     }, 10000);

Bây giờ mã chờ 10 giây trước khi nó thực thi và voilà nó hoạt động hoàn hảo.

Bạn cũng có thể thêm một trình nghe sự kiện để chờ trang hoàn toàn.

5. Suy nghĩ cuối cùng

Ví dụ:

document.addEventListener("DOMContentLoaded", function() { 
    // Your function goes here
}

Nhưng, nếu chúng ta thêm mã bật lên sau x giây, chức năng trên won won công việc, vì vậy tốt hơn là bám vào chức năng thời gian chờ.

Bạn cũng có thể sử dụng tiện ích mở rộng để thêm nhiều đoạn hay khác, chẳng hạn như chặn quảng cáo, chặn cửa sổ bật lên, tăng phông chữ tiêu chuẩn của trang web, tăng khả năng phản hồi, cập nhật diện mạo của nó, v.v. Khi các đoạn trích JavaScript được thêm vào, chúng sẽ luôn chạy trong các lượt truy cập trong tương lai đến các trang web đó. & nbsp;

Một lời cảm ơn đặc biệt đến Abbey Rennemeyer từ Freecodecamp cho phản hồi biên tập để chuẩn bị bài viết này.

Tuyên bố miễn trừ trách nhiệm: Các quan điểm thể hiện trong bài viết này là những quan điểm của (các) tác giả và không đại diện cho quan điểm của Đại học Carnegie Mellon, cũng như các công ty khác (trực tiếp hoặc gián tiếp) liên quan đến (các) tác giả. Những bài viết này không nhằm mục đích là sản phẩm cuối cùng, mà là sự phản ánh của suy nghĩ hiện tại, cùng với việc là chất xúc tác để thảo luận và cải tiến. The views expressed in this article are those of the author(s) and do not represent the views of Carnegie Mellon University, nor other companies (directly or indirectly) associated with the author(s). These writings are not intended to be final products, yet rather a reflection of current thinking, along with being a catalyst for discussion and improvement.

Bạn có thể tìm thấy tôi trên: Trang web cá nhân của tôi, Medium, Instagram, Twitter, Facebook, LinkedIn hoặc thông qua công ty SEO của tôi.



Học mã miễn phí. Chương trình giảng dạy nguồn mở của Freecodecamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

Bạn sẽ tiêm mã JavaScript ở đâu trong tệp HTML?

JavaScript trong cơ thể hoặc đầu: Các tập lệnh có thể được đặt bên trong cơ thể hoặc phần đầu của trang HTML hoặc bên trong cả đầu và cơ thể.body or head: Scripts can be placed inside the body or the head section of an HTML page or inside both head and body.

Làm thế nào để bạn viết một tập lệnh nội tuyến trong HTML?

Có thể đạt được JavaScript nội tuyến bằng cách sử dụng thẻ script bên trong phần thân của HTML và thay vì chỉ định nguồn (src = Hồi.using Script tag inside the body of the HTML, and instead of specifying the source(src=”…”) of the JavaScript file in the Script tag, we have to write all the JavaScript code inside the Script tag.