Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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_Css_Iframe_Tooltip - Fatal编程技术网

Javascript 有没有办法将IFRAME溢出的内容放到父帧上?

Javascript 有没有办法将IFRAME溢出的内容放到父帧上?,javascript,css,iframe,tooltip,Javascript,Css,Iframe,Tooltip,我有一个UI小部件,需要放在一个IFRAME中,这既是出于性能原因,也是为了便于我们将其联合到附属网站。小部件的UI包括显示在其他页面内容顶部的工具提示。请参见下面的屏幕截图或查看其实际操作。有没有办法使IFRAME中的内容与父帧的内容重叠 据我所知,这是办不到的。为什么不使用XHR请求并填充div呢?不,这是不可能的。忽略任何历史原因,现在它将被视为一个安全漏洞——例如,许多站点将不受信任的内容放入iframe(iframe源是不同的源,因此无法根据同一源策略修改父框架) 如果此类不受信任的内

我有一个UI小部件,需要放在一个IFRAME中,这既是出于性能原因,也是为了便于我们将其联合到附属网站。小部件的UI包括显示在其他页面内容顶部的工具提示。请参见下面的屏幕截图或查看其实际操作。有没有办法使IFRAME中的内容与父帧的内容重叠


据我所知,这是办不到的。为什么不使用XHR请求并填充div呢?

不,这是不可能的。忽略任何历史原因,现在它将被视为一个安全漏洞——例如,许多站点将不受信任的内容放入iframe(iframe源是不同的源,因此无法根据同一源策略修改父框架)


如果此类不受信任的内容具有将内容放置在iframe边界之外的机制,则它可以(例如)在父框架的真实登录字段上放置“相同”的登录div(或其他内容),从而窃取用户名/密码信息。这很糟糕。

这可能是因为它不适合您的要求,或者它实际上可能没有帮助(!),但可能值得一看。它是iframe和div的一种混合体,可能被打包成一个小部件(您最好的选择是给客户端一个
标记,它将吸收UFrame和相关的标记)。我不确定的是你是否能达到你所需要的覆盖,但这可能值得一试。很抱歉,我不能说得更具体,但这不是我自己实际使用过的东西,我只是在前一段时间将其标记为书签以供将来参考。

如果您知道Tooltop可以具有的绝对值顶部,您可以创建一个div,该div是内容的高度+工具提示将显示的最高距离。将iframe与div底部对齐。确保iframe和div透明。然后应显示带有工具提示的iframe内容。尽管这会让你头疼,因为要确保高亮显示等内容在所有浏览器中都能正常工作。

我找不到一种方法让框架的内容从框架中流出,但我确实找到了一种方法来绕过它,方法是将工具提示移动到父文档中,并将其放置在iframe的上方(z-index)

方法是:
1) 在父文档中查找iframe
2) 从DOM中删除tooltip元素,并将其添加到包含iframe的元素内的父文档中。
3) 您可能需要调整z索引和定位,具体取决于您最初的操作方式

您可以使用parent.document访问iframe的父文档

jQuery(tooltip).remove(); var iframeParent = jQuery("#the_id_of_the_iframe", parent.document)[0].parentNode; iframeParent.appendChild(tooltip); //adjust z-index, positioning jQuery(工具提示).remove(); var-iframeParent=jQuery(“\u-iframe的\u-id\u”,parent.document)[0].parentNode; iframeParent.appendChild(工具提示); //调整z索引、定位
将当前iframe和建议的div嵌套在父iframe中,然后将父iframe交给第三方,这两个世界都是最好的

我找到了一种解决类似问题的方法,但这要求能够对父内容进行一些修改

快速上下文:

我正在管理一个网站,该网站通过我们自己的API获取一些与合作伙伴相关的数据,并以一种很好的方式呈现这些数据,其中包含许多过滤选项。我们的一些合作伙伴对在他们自己的网站上显示这些数据感兴趣,但对他们中的很多人来说,开发他们自己的UI来显示API数据是他们负担不起的

我们最初建议将用户界面集成到他们网站上的iframe中,但这样一来,数据就无法被外部搜索引擎(如谷歌)索引。 因此,我们转向了相反的原则:我们将他们站点的顶部菜单集成到放置在UI中的iframe中

问题:

它们的标题菜单通常包含一些下拉子菜单。这些子菜单不能溢出iframe高度,因此会被截断

解决方案:

  • 将iframe设置为css位置“绝对”,并使用高z索引,以便iframe覆盖父UI
  • 在iframe内容中,确定可能溢出iframe框的对象类(在本例中,我们要求菜单所有者向这些元素添加特定的类名,但您可以处理现有类名)
然后在JS中:

  • 获取iframe内容的高度(因此标题的高度不显示任何下拉列表)
  • 将初始iframe高度设置为此高度
  • 使用与此高度相等的边距移动父UI内容,而不被默认iframe内容覆盖
  • 添加一个事件侦听器,当鼠标位于已识别的特定类上时,该侦听器将iframe高度设置为100%。在此状态下,iframe内容可以完全覆盖父内容
  • 添加一个事件侦听器,当鼠标离开特定类时,将iframe高度设置回其原始大小。在这种状态下,一切都恢复正常

这是我们目前正在做的事情,但是——如上所述——其中一个要求是允许第三方网站将IFRAME作为一个小部件放到他们的页面上。当前的实现也在释放UI,但我相信我可以解决这个问题。您只需指定一个XHR API,并允许其他人以他们认为合适的方式插入它(当然也允许他们禁用您的脚本,但就这样吧)。只有当您真正信任内容/小部件时,这才是安全的——iFrame的一个优势是,它们有效地沙箱内容(出于同源政策的考虑),而且,一些第三方网站由非技术人员运行,因此我们希望为他们提供一个直接解决方案(除了我们针对mor的API之外)