如何在网页上沙箱特定元素?

时间:2010-07-06 15:49:07

标签: javascript css

我的网页上有这个东西......我想它可以被称为小部件......

如何将CSS和JS从包含页面的CSS和JS中分离出来?最好不要使用iframe?

在我的应用中,用户可以自定义内容的CSS,因此,我需要一个干净的平板。

3 个答案:

答案 0 :(得分:4)

在窗口小部件的最外层元素上,设置一个相对唯一的类名。例如:

<div class="my_spiffy_widget">
  <!-- Insert spiffy widget here -->
</div>

将Javascript和CSS放在自己的文件中。对于CSS,构建所有选择器,如下所示:

.my_spiffy_widget P { /* paragraph rules */ }
.my_spiffy_widget A { /* anchor rules */ }
.my_spiffy_widget UL { /* unordered list rules */ }

确保您的规则不会被其他CSS规则意外覆盖。

与JavaScript类似,在函数前面加上一个共同的,独特的前缀:

function my_spiffy_widget_doSomething() {...}

尽可能避免使用全局变量,但如果不能,请将它们作为前缀:

var my_spiffy_widget_firstTime = true;

答案 1 :(得分:1)

您可以在属性中添加!important声明,使用户更难以覆盖设置。

例如:

div.widget #header {
    padding-left: 10px !important;
    padding-right: 5px !important;
}

和/或您可以获取CSS重置脚本(例如Eric Meyer的)并在每个选择器前面加上容器DIV的名称。

答案 2 :(得分:0)

您可以在非常复杂的css类名称之外提供所有元素,并确保它们不会与用户将选择的元素发生冲突(例如“KAFHxyz _...”)。这样,所有理智的类名和默认样式将仅适用于“小部件”。

这将是一些努力,因为您需要使用!important设置所有标准CSS样式(因此用户可以说“body {font ...}”并且它仅适用于他的区域。

或者,您可以尝试编写一些获取所有元素的所有样式的javascript,然后添加“widget”(它的JS / CSS),然后将所有样式重置为之前的样式。应该是可能的,但性能可能很糟糕。

[编辑]那就是说,你知道你可以创建一个带有JavaScript的iframe并操纵你内心的内容(里面的DOM),是吗?在这种情况下,IFrame将只是一个类似Div的元素,它为CSS和JS文件添加了一个“命名空间”。