Tôi có thứ mà chúng ta sẽ gọi là "tiện ích con" ... và tôi muốn chèn tiện ích con đó (cuối cùng chỉ là iframe
) vào vị trí hiện tại của thẻ tập lệnh.Chèn khung nội tuyến tại vị trí thẻ tập lệnh hiện tại?
Vì vậy, bạn có thể có:
<p>Some example text</p>
<script src="http://example.com/widget.js" class="widget" async></script>
<p>More text</p>
Trong đó widget.js
tập tin, có là thế này:
var createIframe = function() {
var parent = document.getElementsByClassName('widget');
var iframe = document.createElement('iframe');
iframe.src = '//example.com'
// Works, but just inserts it at the end
document.body.appendChild(iframe);
// Does not work...just doesn't seem to do anything
document.createElement("div").appendChild(iframe);
}
window.onload = function() {
createIframe();
}
Và như đã nêu trong bình luận mã, làm document.body.appendChild(iframe)
hoạt động tốt, nhưng chỉ cần chèn iframe ở cuối tài liệu.
Nhưng những gì tôi thực sự muốn làm là chỉ chèn iframe ngay nơi thẻ script. Đó là document.body.appendChild(iframe)
là nỗ lực của tôi vào nó, nhưng nó theo nghĩa đen chỉ dường như không làm bất cứ điều gì (không có khung nội tuyến và không có lỗi).
Vì vậy, làm cách nào để chèn iframe vào cùng một vị trí với thẻ tập lệnh?
nextSibling chỉ được hỗ trợ kể từ khi IE9 https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.nextSibling –
Cảm ơn các heads-up, nhưng tôi hoàn toàn không quan tâm đến việc hỗ trợ IE cũ trong bất kỳ mã nào mà tôi viết. [jQuery 2 đã được phát hành vào tháng 4 năm 2013] (http://blog.jquery.com/2013/04/18/jquery-2-0-released/) và không hỗ trợ IE <9. Đã đến lúc phải vượt qua nó. –
var thisScript = document.scripts [document.scripts.length - 1]; sẽ chỉ cung cấp cho bạn tập lệnh hiện tại nếu nó không được nhúng bằng cách sử dụng thuộc tính không đồng bộ hoặc trì hoãn và không được chèn bằng cách viết async. – Michael