【问题标题】:Hide iframes if not correctly loaded如果未正确加载,则隐藏 iframe
【发布时间】:2015-02-18 17:01:51
【问题描述】:

我的页面上有几个 iframe 指向外部网站。如果这些服务中断或更改,我想隐藏这些 iframe,而不是在我的页面上显示错误消息。 如果 iframe 已正确加载,有什么方法可以在 Javascript 中查找? 我添加了一个类来隐藏 iframe,然后在 iframe 准备好时使用 jQuery 将其删除,如下所示:

$('#widget').ready(function () {
    $('#widget').removeClass('hidden');
});

当我在 iframe src 中放置无效 URL 时,它仍然会删除隐藏类,显示错误 iframe。 我的问题有两个:

  • 如果 iframe 已正确加载,我怎样才能使函数运行?
  • 我不想使用 $('#widget').ready,而是使用 $('iframe').ready 来同时定位所有 iframe;如果这样做,如何在函数内部引用加载的特定 iframe?

谢谢!

【问题讨论】:

  • 您需要检查 iframe 的 src url。你不能使用 JS 来做到这一点。你的后端使用 PHP 吗?

标签: javascript jquery iframe


【解决方案1】:

您的问题可以归结为:

如何通过 Javascript 检查 URL 是否存在以及网站是否存在?

答案分为:

  • 对于内部 URLs,使用 AJAX 并检查响应代码:如果是 2xx3xx(例如 200 或 302),则可以。如果是 4xx5xx(例如 404 或 500),那就不好了。在a similar answer 上阅读更多信息。

  • 对于外部 URLs,由于名为 same-origin policy 的安全措施,您不能这样做。

由于您似乎指向外部 URL,因此这是我的建议:

创建一个服务器端组件(一个 Servlet、一个 RESTful WebService、一个 Struts2 操作等......根据您使用的服务器端技术,无论您喜欢什么)为您执行检查,并返回一个流式传输响应数据(如果有)和您可以检查错误的 HTTP 响应代码。然后从<iframe>s 调用你的组件 URL。

【讨论】:

  • 看起来这不是一件容易的事,因为我坚持...我正在使用 PHP 和 Zend Framework 2,如何从那里检查 URL 是否存在?
  • 我不使用这些,所以我不知道。您应该发布一个单独的问题,询问“如何从 PHP / ZendFramework 2 联系和下载站点服务器端”,在搜索过这样的问题是否已经被询问和回答之后。
【解决方案2】:

你可能无法使用 Javascript 做你想做的事,你需要服务器端的东西,例如 PHP。



但是,这里有一些有用的地方可以查找更多信息:


您可以使用此 JQuery 函数在 iframe 加载后运行代码:

$('#myIframe').load(function(){
    //your code (will be called once iframe is done loading)
});

查看this Stack Overflow question and answers 了解 iframe 加载。


要定位函数内的特定元素,请执行以下操作:

$('iframe').aFunction(function() { this.doSomething(); } );

查看this Stack Overflow question 并回答有关“this”的问题。

【讨论】:

  • 我猜load() 总会发生,即使收到 404 或 500,不是吗?
  • 不幸的是,由于某种原因,这两个建议似乎都不起作用。如果我使用 load 而不是 ready,看起来函数有时会运行,有时不会,无法理解是什么原因......使用 $('iframe') 和 this(或 $(this)) 它永远不会运行。跨度>
猜你喜欢
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 2018-04-30
  • 2015-04-17
相关资源
最近更新 更多