最有可能的是,无论如何您都应该使用iframe
s - 最有可能的是,您与主管的沟通有问题。也许他们的学位是管理方面的,或者是 CS,但他们对 JavaScript 了解不多。也许他们甚至不知道 aniframe
是什么。这是最有可能的,这就是为什么你得到了所有这些反对票。很难理解任何情况下,理智的人(在那里没有沟通问题)真的想做类似“做的事情iframe
——也就是说,嵌入一个页面——,但不使用iframe
”。你是说你想“嵌入一个页面”,对吧?所以,使用iframe
,给你。我可以说,为了“做 iframe 所做的事情,但不使用它”,使用一个svg
标签,然后在其中添加一个foreignObject
标签,这有点像iframe
. 但同样,这似乎不太可能是您真正想要的。
但你应该得到怀疑的好处。也许我错了,你真的应该使用“复制和粘贴”嵌入页面——这比iframe
. 这可能是关于您的页面在嵌入页面出现故障或更改时保持不变,谁知道呢。
在这种情况下,您确实会在 HTML 中获得“正文中的正文”,方法是将要嵌入的正文从外部页面的 HTML 复制到您自己页面的 HTML 中。(您还必须复制一些但不是全部的 JavaScript,和一些但不是全部的 CSS,所有这些都可能需要相当长的时间。)
“body inside body”很可能不是“格式良好”,但可以忽略这一点,因为浏览器(必须向后兼容)在非“格式良好”方面非常健壮。
然后,当您想确保外来的 CSS 将适用于嵌入部分,而您的页面的 CSS 不适用时,“body in body”的怪癖可能只是因祸得福。也就是说,您可以body>body
在复制的外部 CSS 中的每个路径前添加(除非它包含body
,然后替换body
为body>body
)。然后,给外部主体一个外部页面肯定不会使用的类(例如,使用你自己的名字),并body.coskan
在“你的”CSS中的任何地方添加前缀。这与雅克的建议非常相似。
也许一个更好的主意(如果确实“创建外部页面的离线副本”是问题)是这样的:打开要嵌入到单独窗口/选项卡中的页面。然后,编写一些 JavaScript,它使用window.getComputedStyle
和element.style
. lorem
=ipsum
为了修改每个 dom 节点(在您希望嵌入的页面部分内),使其具有渲染中使用的样式(计算样式)作为内联样式,以便所有 CSS 都“推入” HTML(或 DOM)。然后,将修改后的 HTML 插入页面。很可能,有人已经编写了这样的“CSS inline-ifyer”工具。生成的 HTML 是“丑陋的”,但谁在乎呢。它做你想做的事,与“雅克方法”相比,这种方法要快得多(开发时间),并且嵌入的页面确实是静态的,iframe
. (“静态”的意思是,如果 Oracle 改变他们的页面,它不会影响你的页面。)
再想一想,上面的“更好的主意”实际上仅/最适合嵌入页面没有 JavaScript 的情况;否则,最好使用“雅克方法”。还有另一种方法(如果确实,要嵌入的部分是非交互式的):制作屏幕截图,并包含图像。
但也许它根本不是“静态的”,你实际上需要与外部页面进行通信(例如查询外部数据库)。那么,我最初的“误传假设”就更有可能了。在那种情况下,为什么不是 iframe?好吧,你可以做一个XMLHttpRequest
,然后用 JavaScript 剖析结果。它比 iframe 灵活得多。但还有更多的工作。