Javascript 如何注射<;脚本>;标记到没有文档的空iframe中。是否写入?

Javascript 如何注射<;脚本>;标记到没有文档的空iframe中。是否写入?,javascript,iframe,Javascript,Iframe,我想加载一个iframe,它除了从给定的URL加载一个JavaScript文件之外什么都不做。虽然将一个简单的HTML页面加载到iframe中很容易,iframe只包含标记来加载JavaScript文件,但这需要向服务器发出两个请求 因此,我的想法是编写代码,将JS文件从父窗口中的调用方法加载到空的iframe中 类似的内容适用于所有浏览器: function createScriptFrame(container, url) { const frame = document.creat

我想加载一个
iframe
,它除了从给定的URL加载一个JavaScript文件之外什么都不做。虽然将一个简单的HTML页面加载到iframe中很容易,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();
}

这些功能在Chrome和Safari中运行良好,但在Firefox中不起作用

我已经用几种方法编译了一个测试来加载脚本:


有什么办法可以让它工作吗?

你可以创建一个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)
var url='foo'
var blob=新blob([
''
],{type:'text/html'})
var iframeUrl=URL.createObjectURL(blob)
console.log(iframeUrl)
…或者如果您喜欢base64 url


您也可以使用,但IE/Edge不支持它。您可以创建一个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)
var url='foo'
var blob=新blob([
''
],{type:'text/html'})
var iframeUrl=URL.createObjectURL(blob)
console.log(iframeUrl)
…或者如果您喜欢base64 url


您也可以使用,但IE/Edge不支持,这是一个好主意,我已经在Plunk中添加了blob和数据URL,但在任何浏览器中都不起作用。框架内容已正确创建,但从未加载
frame.js
。可能是安全约束。您必须向javascript文件添加
base
标记或使用绝对路径blob和dataURI之间有一个不同之处,即blob将继承Origin属性,这对于访问相同的本地存储、Cookie、indexeddb、,cors请求ETCUS绝对URL对数据URL和blob都有效。谢谢仍然需要了解有关浏览器支持的信息。。。对于android,您可能需要使用webkit prefixNice,我已经将blob和数据URL添加到Plunk中,但在任何浏览器中都不起作用。框架内容已正确创建,但从未加载
frame.js
。可能是安全约束。您必须向javascript文件添加
base
标记或使用绝对路径blob和dataURI之间有一个不同之处,即blob将继承Origin属性,这对于访问相同的本地存储、Cookie、indexeddb、,cors请求ETCUS绝对URL对数据URL和blob都有效。谢谢仍然需要了解有关浏览器支持的信息。。。对于android,您可能必须使用webkit前缀
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)