我Knockout.js
用来绑定iframe广告src
代码(这对于用户而言是可配置的)。
现在,如果用户配置了http://www.google.com(我知道它不会在iframe中加载,这就是为什么我将它用于-ve场景),并且必须在IFrame中显示它。但它抛出错误:
拒绝在框架中显示“ http://www.google.co.in/ ”,因为它将“ X-Frame-Options”设置为“ SAMEORIGIN”。
我为iframe使用以下代码:-
<iframe class="iframe" id="iframe" data-bind="attr: {src: externalAppUrl, height: iframeheight}">
<p>Hi, This website does not supports IFrame</p>
</iframe>
我想要的是,如果URL无法加载。我想显示自定义消息。 在这里
现在,如果我将onload和onerror用作:-
<iframe id="browse" style="width:100%;height:100%" onload="alert('Done')" onerror="alert('Failed')"></iframe>
它可以很好地加载w3schools.com,但不能与google.com一起加载。
其次:-如果我将其作为一个函数并像我在小提琴中所做的那样尝试,则它不起作用。
<iframe id="browse" style="width:100%;height:100%" onload="load" onerror="error"></iframe>
我不知道该如何运行它并捕获错误。
编辑:-我曾见过要在iframe未加载或在stackoverflow中加载问题的情况下调用函数的方法,但它显示了可在iframe中加载的网站的错误。
此外,我已经研究了加载事件上的Stackoverflow iframe, 谢谢!
由于浏览器设置的“同源策略”,您将无法从客户端执行此操作。除了基本属性(如宽度和高度)外,您将无法从iFrame上获得很多信息。
此外,谷歌在其响应标头中设置SAMEORIGIN 的“ X-Frame-Options ”。
即使您对Google进行了ajax调用,您也将无法检查响应,因为浏览器执行的是“同源政策”。
因此,唯一的选择是从服务器发出请求,以查看是否可以在IFrame中显示该站点。
因此,在您的服务器上。您的网络应用会向www.google.com发出请求,然后检查响应以查看其标题参数是否为X-Frame-Options。如果确实存在,则说明IFrame会出错。
Roblox使用
iframe
技巧<iframe src="roblox-player:foo">
通过检测自定义URI处理程序来检测是否安装了游戏。检测到此iframe
故障会触发“下载”按钮出现。那他们怎么办呢?@QZ支持我不知道您在说什么。
@EvanLarsen我要提到一个非常流行的视频游戏,该游戏成功地使用了该
<iframe>
技术来启动(并且我希望检测到)在OS中注册的URI处理程序。这是一个免费游戏,您可以安装并自己查看。当您通过浏览器加入游戏时,它会使用iframe hack来启动游戏。如果失败,则显示“下载”按钮。他们以某种方式知道URI是否已正确处理。我最初的猜测是捕获该iframe
错误,但是答案(以及我的测试)似乎表明这是不可能的。他们如何知道iframe何时发生故障?这只是一个猜测,但我敢打赌,该网站只是在您本地计算机上调用了一个自托管的Web应用程序。如果呼叫失败,则会显示下载按钮。将游戏下载并安装到计算机上后,该网站将能够调用本地自托管的Web应用程序。通过自托管的Web应用程序。.我的意思是,带有http端点的应用程序可以被任何知道它的网站调用。(即localhost:7845 / opengame / room / 2534)
这
localhost:7845
完全是假设。首先,它将遇到混合内容警告/错误(roblox.com使用HTTPS),其次,如果发生冲突,它将需要故障转移端口。用于启动该软件的技术是一种iframe
。可以通过检查页面源来观察。当它无法启动该软件时,他们便能够检测到它。这可以通过使用浏览器跟踪器ID的“电话回家” +超时方法来完成。我之所以这样说是因为,这种iframe
故障检测对于启动关联的应用程序很有用,但前提是可以检测到故障。