2

我正在编写一个有时会创建模式对话框的 GreaseMonkey 脚本——类似于

<div id="dialog">
   Foo
</div>

. 但是如果网站有类似的东西我该怎么办

#dialog {
    display: none !important;
}

? 或者也许某个网站的所有者是偏执狂并且有类似的东西

div {
    display: none !important;
}
div.trusted {
    display: block !important;
}

因为他不希望像我这样的人在他的页面上添加不受信任的内容。如何防止这些样式隐藏我的对话框?

我的脚本在所有页面上运行,因此我无法根据每种情况调整我的代码。

有没有办法沙箱我的对话框?

4

2 回答 2

1

实际上是一个非常有趣的问题,这是另一种方法:

添加 iframe 并对其进行修改会为您创建一个单独的 css 空间(您的沙箱)

看看这个 jsfiddle 例子:http: //jsfiddle.net/ZpC3R/2/

var ele = document.createElement("iframe");
ele.id = "dialog";
ele.src = 'javascript:false;';
ele.style.height = "100px";
ele.style.width = "300px";
ele.style.setProperty("display", "block", "important");
document.getElementById("dialog").onload = function() {
    var d = document.getElementById("dialog").contentWindow.document;
    // ... do your stuff within the iframe
};

这似乎在 Firefox 中没有问题。

现在您只需要确保 iframe 未受影响,您可以按照我在 1. 回答中描述的方式执行此操作

于 2013-07-01T15:41:53.010 回答
-1

只需像这样创建 div:

var ele = document.createElement("div");
ele.style.setProperty("display", "block", "important");

那应该覆盖所有其他样式afaik。

看这里,它似乎工作:http: //jsfiddle.net/ZpC3R/

于 2013-07-01T14:58:10.653 回答