javascript - 防止注入(inject)的标签受到父 CSS 的影响

标签 javascript html css jwplayer

我想像这样动态地将一些 HTML 注入(inject)到另一个 HTML 页面:

<div id="jwplayer-player"> ... </div>

在父 HTML 页面中,有通用的 DIV CSS 规则(这是示例,可能根据页面不同):

div {
    margin-top: 15px;
    line-height: 200%;
    white-space: normal;
}

如何避免注入(inject)的 DIV 受到它们的影响。

播放器注入(inject)如下:

<div id ="vid-player-container" class="player-container"></div> 
<script type="text/javascript"> 
document.write('<script type="text/javascript" src="some.site.com/jwplayer/jwplayer.js" ></script>'); 
document.write('<script type="text/javascript" src="some.script.com/player_style1.js"></script>'); 
</script> 

如果我在那些父页面之外单独尝试,效果很好。 所以关键是隔离注入(inject)的代码不受父站点的影响,注意 iFrame 不是我的选择。

最佳答案

我认为您可以使用 ShadowDOM 来实现您想要做的事情。 https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM

它旨在让您以这种方式分离您的组件,并为封装的 DOM 提供 CSS 和 JavaScript 的隔离。

var shadow = document.querySelector('#container').attachShadow({mode: 'open'});
shadow.innerHTML += '<p>I am text in the injected code</p>'

例如:https://jsfiddle.net/rn46rfgx/

如果您检查页面上的元素,您应该能够看到隔离:

enter image description here

免责声明:虽然这可能对您有用,但我不确定这是正确的方法还是有点“hack” - 我希望其他人能用他们对此的想法来评论这个答案!

此外,我不确定浏览器支持是否适合您,您可以在这里查看:http://caniuse.com/#feat=shadowdom

关于javascript - 防止注入(inject)的标签受到父 CSS 的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41602495/

相关文章:

html - CSS 拉伸(stretch)或适合背景图像

javascript - 选择一个 div 内的第一个 div,但前提是有 10 个 div

html - 使用 css 带阴影的三 Angular 形

javascript - 使用带有 append() 的淡出方法

javascript - “WebFormsBundle”不是有效的脚本名称。名称必须以 '.js' 结尾

javascript - 当由jQuery附加(但不是YouTube)时,Vimeo崩溃

javascript - 对对象数组进行排序(输出数据但不按顺序)

javascript - 调整窗口大小时限制居中div的水平范围

javascript - 如何在javascript中打开base64编码的pdf

javascript - React setState 在调用时渲染组件两次