Cách tốt nhất để chèn html bằng javascript

Đặt tập lệnh ở dưới cùng của phần tử sẽ cải thiện tốc độ hiển thị, vì việc giải thích tập lệnh làm chậm màn hình

JavaScript bên ngoài

Tập lệnh cũng có thể được đặt trong các tệp bên ngoài

tệp bên ngoài. myScript. js

function myFunction[] {
  tài liệu. getElementById["bản trình diễn"]. innerHTML = "Đoạn đã thay đổi. ";
}

Tập lệnh bên ngoài là thực tế khi cùng một mã được sử dụng trong nhiều trang web khác nhau

Các tệp JavaScript có phần mở rộng tệp. js

Để sử dụng tập lệnh bên ngoài, hãy đặt tên của tệp tập lệnh trong thuộc tính [nguồn]

let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
0 của
let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
1

Đôi khi bạn có thể muốn hoặc cần đưa nội dung từ nguồn bên ngoài vào tiện ích mở rộng của mình. Tuy nhiên, có rủi ro là nguồn có thể có các tập lệnh độc hại được nhúng trong đó—do nhà phát triển nguồn hoặc bên thứ ba độc hại thêm vào

Lấy một trình đọc RSS làm ví dụ. Bạn không biết tiện ích mở rộng của mình sẽ mở những nguồn cấp RSS nào và không kiểm soát được nội dung của những nguồn cấp RSS đó. Vì vậy, có thể người dùng có thể đăng ký một nguồn cấp dữ liệu, chẳng hạn như tiêu đề của một mục nguồn cấp dữ liệu bao gồm một tập lệnh. Điều này có thể đơn giản như bao gồm mã JavaScript trong các thẻ

let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
2. Nếu bạn trích xuất tiêu đề, giả sử đó là văn bản thuần túy và thêm nó vào DOM của trang do tiện ích mở rộng của bạn tạo, thì người dùng của bạn hiện có một tập lệnh không xác định đang chạy trong trình duyệt của họ. Do đó, cần cẩn thận để tránh đánh giá văn bản tùy ý dưới dạng HTML

Bạn cũng cần nhớ rằng các tiện ích mở rộng có ngữ cảnh đặc quyền, chẳng hạn như trong tập lệnh nền và tập lệnh nội dung. Trong trường hợp xấu nhất, tập lệnh nhúng có thể chạy ở một trong những ngữ cảnh này, một tình huống được gọi là leo thang đặc quyền. Tình huống này có thể khiến trình duyệt của người dùng bị tấn công từ xa bằng cách cho phép trang web đã chèn mã truy cập dữ liệu quan trọng của người dùng, chẳng hạn như mật khẩu, lịch sử trình duyệt hoặc hành vi duyệt web

Bài viết này xem xét cách làm việc an toàn với dữ liệu từ xa và thêm dữ liệu đó vào DOM

Làm việc với các chuỗi tùy ý

Khi làm việc với chuỗi, có một số tùy chọn được đề xuất để thêm chúng vào trang một cách an toàn. các phương thức tạo nút DOM tiêu chuẩn hoặc jQuery

Phương pháp tạo nút DOM

Một cách tiếp cận đơn giản để chèn chuỗi vào trang là sử dụng các phương thức thao tác DOM gốc.

let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
3,
let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
4 và
let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
5. Cách tiếp cận an toàn là tạo các nút riêng biệt và gán nội dung của chúng bằng textContent

let data = JSON.parse[responseText];
let div = document.createElement["div"];
div.className = data.className;
div.textContent = `Your favorite color is now ${data.color}`;
addonElement.appendChild[div];

Cách tiếp cận này an toàn vì việc sử dụng

let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
0 sẽ tự động thoát khỏi mọi HTML từ xa trong
let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
1

Tuy nhiên, hãy cẩn thận, bạn có thể sử dụng các phương pháp gốc không an toàn. Lấy đoạn mã sau

let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;

Ở đây, nội dung của

let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
2 hoặc
let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
1 có thể chứa HTML có thể đóng thẻ sớm, chèn thêm nội dung HTML tùy ý, sau đó mở thẻ khác

jQuery

Khi sử dụng jQuery, các hàm như

let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
4 và
let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
5 thoát khỏi nội dung khi nó được thêm vào DOM. Vì vậy, ví dụ "màu yêu thích" ở trên, được triển khai trong jQuery, sẽ trông như thế này

________số 8

Làm việc với nội dung HTML

Khi làm việc với nội dung có nguồn gốc bên ngoài mà bạn biết là HTML, việc làm sạch HTML là điều cần thiết trước khi nó được thêm vào trang. Cách tốt nhất để làm sạch HTML là sử dụng thư viện làm sạch HTML hoặc một công cụ mẫu có các tính năng làm sạch HTML. Trong phần này, chúng ta xem xét một số công cụ phù hợp và cách sử dụng chúng

khử trùng HTML

Thư viện làm sạch HTML sẽ loại bỏ mọi thứ có thể dẫn đến việc thực thi tập lệnh khỏi HTML, vì vậy bạn có thể đưa các bộ nút HTML hoàn chỉnh từ một nguồn từ xa vào DOM của mình một cách an toàn. DOMPurify, đã được nhiều chuyên gia bảo mật xem xét, là một thư viện phù hợp cho nhiệm vụ này trong các tiện ích mở rộng

Để sử dụng sản xuất, DOMPurify có phiên bản rút gọn. thanh tẩy. tối thiểu. js. Bạn có thể sử dụng tập lệnh này theo cách phù hợp nhất với tiện ích mở rộng của mình. Ví dụ: bạn có thể thêm nó dưới dạng tập lệnh nội dung

"content_scripts": [
  {
    "matches" : [""],
    "js": ["purify.min.js", "myinjectionscript.js"]
  }
]

Sau đó, trong myinjectionscript. js, bạn có thể đọc HTML bên ngoài, làm sạch nó và thêm nó vào DOM của trang

let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
0

Bạn có thể sử dụng bất kỳ phương pháp nào để thêm HTML đã làm sạch vào DOM của mình, chẳng hạn như hàm

let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
6 của jQuery. Hãy nhớ rằng cờ
let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
7 cần được sử dụng trong trường hợp này

let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
3

Công cụ mẫu

Một mẫu phổ biến khác là tạo một mẫu HTML cục bộ cho một trang và sử dụng các giá trị từ xa để điền vào chỗ trống. Mặc dù cách tiếp cận này thường được chấp nhận, nhưng cần cẩn thận để tránh sử dụng các cấu trúc cho phép chèn mã thực thi. Điều này có thể xảy ra khi công cụ tạo khuôn mẫu sử dụng các cấu trúc chèn HTML thô vào tài liệu. Nếu biến được sử dụng để chèn HTML thô có nguồn từ xa, thì biến đó có cùng rủi ro bảo mật được đề cập trong phần giới thiệu

Ví dụ: khi sử dụng các mẫu ria mép, bạn phải sử dụng ria mép kép,

let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
8, thoát khỏi mọi HTML. Phải tránh sử dụng bộ ria mép,
let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
9, vì điều này đưa vào một chuỗi HTML thô và có thể thêm mã thực thi vào mẫu của bạn. Ghi đông hoạt động theo cách tương tự, với các biến trong ghi đông kép,
let data = JSON.parse[responseText];
addonElement.innerHTML = `
Your favorite color is now ${data.color}
`
;
8, được thoát. Trong khi đó, các biến trong tay lái ba được để nguyên và phải tránh. Ngoài ra, nếu bạn tạo trình trợ giúp Tay lái bằng cách sử dụng
let node = $["
"]; node.addClass[data.className]; node.text[`Your favorite color is now ${data.color}`]; 1, hãy sử dụng
let node = $[""];
node.addClass[data.className];
node.text[`Your favorite color is now ${data.color}`];
2 để thoát mọi tham số động được chuyển cho trình trợ giúp. Đây là một yêu cầu vì biến kết quả từ
let node = $[""];
node.addClass[data.className];
node.text[`Your favorite color is now ${data.color}`];
1 được coi là an toàn và nó không thoát khi được chèn bằng thanh điều khiển kép

Có những cấu trúc tương tự trong các hệ thống tạo khuôn mẫu khác cần được tiếp cận với cùng mức độ quan tâm

Chủ Đề