Đối với các trình duyệt hiện đại có hỗ trợ html5 bạn có thể sử dụng document.currentScript
để lấy phần tử tập lệnh hiện tại.
Nếu không, sử dụng querySelector()
để chọn yếu tố kịch bản của bạn bằng cách id hoặc thuộc tính.
Lưu ý rằng chúng tôi không sử dụng thuộc tính src
vì có thể mong manh nếu bạn phân phối qua CDN hoặc có sự khác biệt giữa môi trường phát triển và sản xuất.
embed.js
(function(){
// We look for:
// A `script` element
// With a `data-id` attribute
// And a `data-name` attribute equal to "MyUniqueName"
var me = document.querySelector('script[data-id][data-name="MyUniqueName"]');
var id = me.getAttribute('data-id');
})();
Trong html host:
<script async
data-id="p3PkBtuA"
data-name="MyUniqueName"
src="//example.com/embed.js">
</script>
approcah này có nhược điểm mà bạn không thể nhúng thành công hai kịch bản giống hệt nhau. Đây là một trường hợp khá hiếm, nhưng có thể xảy ra.
Lưu ý rằng tôi sẽ đích thân chúng tôi data-id
để chọn kịch bản thay vì thông qua dữ liệu, và sẽ đặt các dữ liệu duy nhất trong một thẻ mô tả nhiều hơn:
<script async
data-id="MyUniqueName"
data-token="p3PkBtuA"
src="//example.com/embed.js">
</script>
mà sẽ cho phép tôi sử dụng này như sau:
var token = document
.querySelector('script[data-id="MyUniqueName"][data-token]')
.getAttribute('data-token');
Nó nói chung là một ý tưởng tốt để giải thích _why_ mã của bạn trả lời câu hỏi với một lời giải thích ngắn gọn (hoặc thậm chí tốt hơn, chi tiết). – ApproachingDarknessFish