如果预期的跨域src是404,如何在iframe中加载默认页面?

时间:2016-01-29 23:23:07

标签: javascript iframe cross-domain

我的服务器上托管了一个javascript脚本,该脚本已添加到我未通过<script src="http://myserver/myscript.js">标记托管的网站中。当这些网站打开时,脚本将启动一个模式框,打开我在iframe中托管的页面。

我知道这听起来很阴暗,但拥有这些网站的人正在为此付出代价。这真的是合法的。

对于给定的客户,我最多可以有5个不同的页面。查询字符串确定在iframe中加载哪个页面。

我希望在查询字符串变量与我拥有的任何页面不匹配的情况下,加载默认页面(每个客户端的不同默认值)。

我可以在查询字符串上检查变量的LACK并在这种情况下打开默认值。但是,如果在iframe中加载的页面是404,该怎么办?在这种情况下如何加载默认值?

我已经阅读了所有与此相关的帖子。我知道跨域安全风险意味着Javascript不支持这一点。但是有些帖子提到除了Javascript之外,还有可能使用PHP实现它。有哪些解决方法?

我不能在外部网站上包含任何库。我只能在外部网站上放置单个<script>标记。

我正在使用普通的,普通的javascript来处理所有事情(因为我不能在外部网站上包含一个jquery库),而且它现在都在一个文件中。

如果我要使用其他文件,我不确定这些文件是如何一起工作的。我也需要帮助。

2 个答案:

答案 0 :(得分:1)

我相信您正在寻找PostMessage API:

https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

这将允许在外部Javascript(客户端附加到其网站的脚本)和您的(OWNED)iFrame内容之间传递消息。 iFrame中的脚本可以监听上面发布的消息,反之亦然。

通过此操作,您可以将客户端脚本设置为侦听来自iFrame的消息,例如{loaded: true},并在发生(或不发生)时采取措施。如果iFrame在一定的秒数内没有回复客户端脚本的请求,那么您可以合理地相信页面404&#39; d。

答案 1 :(得分:0)

你可以使用:

iframeElement.onerror = function(){
  // do stuff
}

但是,它不会在较旧的浏览器中工作。