【问题标题】:Allow click to pass through iFrame to content behind it允许点击通过 iFrame 到它后面的内容
【发布时间】:2014-07-13 20:45:02
【问题描述】:

我能找到的最接近我想要在 SO 上做的事情就是这个,但听起来这不再是一个可行的解决方案,而且它也不是 iFrames 特有的: Click through a DIV to underlying elements

基本上,我有一个 DIV,它被添加到包含 iFrame 的页面中。 iFrame 内容可以最小化,因此它们不会总是占用 iFrame 的所有空间。 iFrame 是透明的,因此您仍然可以看到它后面的网页。 我需要能够点击它后面的网页中的元素,但到目前为止还没有运气。

他们有一个大约 400x400 的 iFrame,但是当其中的内容最小化时,您仍然可以点击它后面的网页。我尝试做类似的事情,但无法让它工作。

即使在透明区域我也无法点击它后面的页面。我也尝试过使用其他帖子中提到的指针事件:无,但这没有帮助。它只会禁用 iFrame 中的元素,但不会影响点击它。

有谁知道如何做到这一点?一种拥有更大 iFrame 的方法,其中的内容可以最小化,您仍然可以点击 iFrame 后面的内容?

更新: 使用框架时,这似乎是不可能的。

【问题讨论】:

  • 如何捕获 iframe 中的所有点击,然后将它们发送回父页面?
  • 如何将它们传递给父页面?底层按钮的悬停效果如何?
  • 嗨 - 你有办法解决这个问题吗?
  • @AshD 我不相信这是可能的

标签: javascript html css iframe


【解决方案1】:

【讨论】:

【解决方案2】:

我想你错过了:

myDiv.style.opacity = "0";
myDiv.style.filter  = "alpha(opacity=0)"; /* For IE8 and earlier */

顺便说一句,使用 CSS 类而不是通过 JS 应用 CSS。告诉我进展如何。

【讨论】:

  • 我已经尝试过不透明度,但没有成功。实际上,我在原始帖子中已将其注释掉。在这种情况下,我不想使用 CSS 文件,因为这个 getz 是动态加载的,我不想只为这件事下载文件。这个脚本在别人的网站上。
  • 唯一有效的是可见性隐藏,但我的 iframe 中的所有内容都是不可见的。
  • 然后,你可以应用可见性:当 iframe 最小化时隐藏。
  • 即使它被最小化了,里面仍然有内容。我需要轮询服务器以了解 iframe 中发生了什么,我想避免这种情况。基本上它是一个 iframe 内的折叠选项卡,可以展开,但是当它折叠时(即:更小),我仍然希望能够在不可见区域后面单击。
  • 请添加一个(或多个)屏幕截图以准确显示您的需求。
【解决方案3】:

策略 1:iFrame 调整大小

如果您能够将脚本同时放入主机页面和 iFrame 中包含的页面,则可以使用 Bradshaw 的 iFrame Resizer JS。

它会动态调整 iFrame 的大小以适应其内容。跨域工作。

它的用例包括:

  1. 您正在创作主机页面和 iFrame 页面。
  2. 您正在创作主机页面或 iFrame 页面,并且正在与其他页面的作者合作。

我无法判断您的用例是否符合其中任何一个标准。

策略 2:重叠 iFrame

使用 JQuery,您可以切换完全或部分重叠的 2 个(或 n 个)iFrame 的可见性。您可以加载具有相同内容或不同内容的每个 iFrame。当任何 iFrame 不可见时,您可以单击它以查看其背后的内容,无论是另一个 iFrame 还是其他任何内容。

在您的应用程序中,您会以不同的方式调整 2 个 iFrame:iFrame1="full size"、iFrame2="minimized."

在我的应用程序(如下)中,2 个 iFrame 大部分重叠并且具有相同的内容,但我对它们进行了不同的填充并稍微改变了它们的位置,具体取决于页面上是否存在其他内容。我还在使用 iFrame Resizer(上图)动态调整两个 iFrame 的大小以适应它们的内容,但您的应用程序可能不需要这样做。

我建议为您的 iFrame(如下)使用不同的边框颜色,同时调整它们的位置和大小。

5 分钟前我才学过 JS,所以,如果我误解了你的问题,我深表歉意。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>

// This is the Bradshaw resizer script.  Required iff you need dynamic resizing.
<script src="[https://MyiFramehost.com/web/embed/js/inline.js]"/></script> 

<div id="padded" style="width:100%" >
<iframe id="oos_inline" style="border:solid;border-color:green;width:100%;position:relative;padding:65px 0px 0px 0px;top:-65px;"></iframe>
</div>

<div id="normal"style="width:100%;"  >
<iframe id="oos_inline_padded" style="border:solid;border-color:blue;width:100%;position:relative;padding:0px 0px 0px 0px;"></iframe>
</div>

<script>
var iframe_padded = document.getElementById("oos_inline_padded");
var iframe = document.getElementById("oos_inline"); 

if(document.getElementById("home-page")!=null){
    iframe.src = "https://the_embedded_site.com";    
    $(iframe).show();
    $(iframe_padded).hide();
} else {
    iframe_padded.src = "https://the_embedded_site.com";
    $(iframe).hide();
    $(iframe_padded).show();

}

// This starts dynamic resizing.  Required iff you need dynamic resizing.
iFrameResize({log:true})  

</script>

【讨论】:

    猜你喜欢
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2013-01-29
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2020-01-22
    相关资源
    最近更新 更多