小编igl*_*vzx的帖子

设置@grant值时如何访问`window`(目标页面)对象?

假设我正在使用以下网页:

<html>
<body>
<span id="click">click me</span>
<script>
var hello = function() {
    alert('hello');
}

document.getElementById('click').addEventListener('click', function(e) {
    hello();
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我的Greasemonkey脚本是:

// ==UserScript==
// @name        My Script
// @include     http://example.com/hello.html
// @version     1
// @grant       none
// ==/UserScript==

window.hello = function() {
    alert('goodbye');
}
Run Code Online (Sandbox Code Playgroud)

禁用Greasemonkey脚本后,单击#click页面上的元素将显示"hello"警报.启用脚本后,单击该元素将显示"再见"警报.

很简单.在hello从网页的功能正在由Greasemonkey的脚本功能所取代.

现在让我们说我想使用Greasemonkey API.当我将@grant值设置为除'none'之外的有效值(例如// @grant GM_setClipboard)[导致Greasemonkey将脚本作为"内容脚本"运行时,而不是像'none'那样在页面的范围内运行),Greasemonkey脚本无法工作.

window.hello 不再定位页面上的正确对象.

更换window.hellounsafeWindow.hello看起来像它的工作,而是下面的错误是在JS控制台抛出:

错误:拒绝访问对象的权限

如何在@grant GM_setClipboard设置目标并替换hello页面上的原始函数时重写Greasemonkey脚本?

系统信息:

  • Windows 7 64位
  • Firefox 32.0 …

javascript firefox greasemonkey

5
推荐指数
1
解决办法
6030
查看次数

如何对新 gTLD 进行 Whois 查找?

有谁知道如何对即将出现的新赞助 TLD(例如 .insurance .guru 等)进行 WhoIs 查找(PHP 或 JavaScript),其中似乎有数百个。

换句话说,当新域名上线时,将对单个 whois 服务器 Whois.net 进行通用查询?解析新域名,或者每个顶级域名都有不同的 whois 服务器。

编辑:为了消除一些混乱 - 我正在尝试计算新 tld 的域可用性,而不是使用新 tld 的 dns 查找。尽管考虑是否正在使用域,但它肯定不可用。

php whois

4
推荐指数
1
解决办法
2812
查看次数

除了特定元素之外,递归设置`display:none`

如果我想隐藏<div id="content">(包括 div#content其自身)内的所有元素,我可以使用以下CSS:

*
{
    visibility: hidden !important;
}

div#content, div#content *
{
    visibility: visible !important;
}
Run Code Online (Sandbox Code Playgroud)

关于这个解决方案需要注意的一点是,隐藏的元素仍占用空间.不幸的是,并非所有元素都具有相同的display属性,因此您不能简单地将visibility上面的内容替换为display.

使用JavaScript,如何将所有元素设置为属于<div id="#content">"family"的display: none

javascript css

1
推荐指数
1
解决办法
2553
查看次数

window.addEventListener('message',myFunction(event))不起作用

我试图理解为什么以下不起作用.

var myFunction = function(event) {
    // do something with event
};

window.addEventListener('message', myFunction(event));
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:"ReferenceError:未定义事件".

但是,以下工作并且event能够使用.

window.addEventListener('message', function(event) {
    // do something with event
});
Run Code Online (Sandbox Code Playgroud)

我怎样才能event在第一种情况下使用?为什么event只能在第二种情况下访问?

javascript firefox events function

1
推荐指数
1
解决办法
1322
查看次数

标签 统计

javascript ×3

firefox ×2

css ×1

events ×1

function ×1

greasemonkey ×1

php ×1

whois ×1