Javascript 禁用iFrame内部的外部内容加载
是否有禁止在iFrame中加载外部内容的方法? 假设有一个iframe定义如下:Javascript 禁用iFrame内部的外部内容加载,javascript,html,iframe,Javascript,Html,Iframe,是否有禁止在iFrame中加载外部内容的方法? 假设有一个iframe定义如下: <iframe srcdoc=" <html> <head> <title>Example Page!</title> <link rel='stylesheet' type='text/css' href='http://example.com/mystyle.css'>
<iframe srcdoc="
<html>
<head>
<title>Example Page!</title>
<link rel='stylesheet' type='text/css' href='http://example.com/mystyle.css'>
</head>
<body>
<p class='main'>Here goes the text.
</p>
<script src='http://example.com/js/superscript.js'>
</body>
</html>">
</iframe>
可以使用sanbox属性中的allow脚本禁用JS的加载,但是有没有办法禁用外部css(和其他外部内容)的加载
如果没有,是否有任何替代“呈现”html代码(例如JS)的方法来启用此功能?我已使用以下功能来删除从iframe中显示的电子邮件中加载某些资产:
const替换=[]
常量h=html
.replace(/url\s*\([\s\s]+?)\)/g,(m,url)=>{
url=url.trim()
试一试{
url=解码组件(url)
}捕获(错误){/**/}
替换。推送(url)
返回'url()'
})
.replace(/[\s')(?:src | srcset | background)?\s*=\s*(['”)([^\1]*?)\1/g,(m,q,src)=>{
如果(!src)返回m//empty
替换。推送(src)
返回“”
})
.replace(/]*?([\s']href\s*=\s*(['“])([^\2]*?)\2)/g,(m,attr,q,src)=>{
如果(!src)返回//空
替换。推送(src)
返回m.replace(属性“”)
})
有趣的是,
是有效的,并且将由chrome显示,所以属性前的空白实际上是不需要的,所以我编辑了这个答案来说明这一点
它可能并不完美,但当您看到更多情况时,可以通过添加属性对其进行调整…我使用了以下功能来删除从iframe中显示的电子邮件中加载某些资产:
const替换=[]
常量h=html
.replace(/url\s*\([\s\s]+?)\)/g,(m,url)=>{
url=url.trim()
试一试{
url=解码组件(url)
}捕获(错误){/**/}
替换。推送(url)
返回'url()'
})
.replace(/[\s')(?:src | srcset | background)?\s*=\s*(['”)([^\1]*?)\1/g,(m,q,src)=>{
如果(!src)返回m//empty
替换。推送(src)
返回“”
})
.replace(/]*?([\s']href\s*=\s*(['“])([^\2]*?)\2)/g,(m,attr,q,src)=>{
如果(!src)返回//空
替换。推送(src)
返回m.replace(属性“”)
})
有趣的是,
是有效的,并且将由chrome显示,所以属性前的空白实际上是不需要的,所以我编辑了这个答案来说明这一点
它可能并不完美,但当你看到更多的情况时,你可以通过添加属性来调整它…是的,你可以通过使用
src
而不是srcdoc
并在前面加上数据:text/html;字符集=UTF-8,
在您的示例中:
<iframe src="data:text/html;charset=UTF-8,<html> <head> <title>Example Page!</title> <link rel='stylesheet' type='text/css' href='http://example.com/mystyle.css'> </head> <body> <p class='main'>Here goes the text. </p><script src='http://example.com/js/superscript.js'> </body> </html>">
</iframe>
是的,您可以通过使用
src
而不是srcdoc
并在前面加上数据:text/html;字符集=UTF-8,
在您的示例中:
<iframe src="data:text/html;charset=UTF-8,<html> <head> <title>Example Page!</title> <link rel='stylesheet' type='text/css' href='http://example.com/mystyle.css'> </head> <body> <p class='main'>Here goes the text. </p><script src='http://example.com/js/superscript.js'> </body> </html>">
</iframe>