Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 禁用iFrame内部的外部内容加载_Javascript_Html_Iframe - Fatal编程技术网

Javascript 禁用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中加载外部内容的方法? 假设有一个iframe定义如下:

<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>