gpt4 book ai didi

javascript - 如何在没有 document.write 的情况下将 <script> 标签注入(inject)到空 iframe 中?

转载 作者:行者123 更新时间:2023-12-01 03:24:30 25 4
gpt4 key购买 nike

我想加载 iframe它除了从给定的 URL 加载 JavaScript 文件之外什么也不做。虽然这很容易,只需将一个简单的 HTML 页面加载到仅包含 <script> 的 iframe 中即可。标记来加载 JavaScript 文件,但这需要向服务器发出两次请求。

所以我的想法是编写代码将父窗口中的调用方法加载JS文件到空的iframe中。

类似的东西适用于所有浏览器:

function createScriptFrame(container, url) {
const frame = document.createElement('iframe');
container.appendChild(frame);
const doc = frame.contentDocument;
doc.open();
doc.write('<html><body><script src="' + url + '"></script></body></html>');
doc.close();
}

但是使用document.write这是一种非常令人讨厌的做法。 Chrome 甚至在控制台中发出警告:[Violation] 避免使用 document.write()。

我想出了一些替代方法,例如:

// same as above until doc.open()
const s = doc.createElement('script');
s.src = url;
doc.head.appendChild(s);

const s = doc.createElement('script');
s.appendChild(doc.createTextNode('(function() { const s =
document.createElement("script"); s.src = "' + url + '";
document.body.appendChild(s); })()'));
doc.head.appendChild(s);

这些在 Chrome 和 Safari 中运行良好,但在 Firefox 中则不然

我已经用多种方法编译了一个测试来加载脚本:https://embed.plnkr.co/l8DwUBQs7cQsi938eTOn/

有什么想法可以让这项工作发挥作用吗?

最佳答案

您可以创建一个 blob 并打开它

var url = 'foo'
var blob = new Blob([
'<html><body><script src="' + url + '"></script></body></html>'
], {type: 'text/html'})
var iframeUrl = URL.createObjectURL(blob)
console.log(iframeUrl)

...或者如果您喜欢 base64 网址

您还可以使用srcdoc但 IE/Edge 不支持

关于javascript - 如何在没有 document.write 的情况下将 &lt;script&gt; 标签注入(inject)到空 iframe 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44924874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com