相关疑难解决方法(0)

window.close和self.close不关闭Chrome中的窗口

问题是,当我调用window.close()self.close()它没有关闭窗口时.现在似乎有一种信念,即在Chrome中你无法通过脚本关闭任何非脚本创建的窗口.这显然是错误的,但无论它应该仍然这样做,即使它需要弹出警报确认.这些都没有发生.

那么,是否有人使用真实的,功能性的,经过验证的关闭窗口的方法,使用类似的东西javascript:window.close()或者javascript:self.close()实际上做了预期的东西以及在非Chrome浏览器的每个浏览器中都能正常运行的东西?任何建议将不胜感激,我正在寻找Javascript特定的解决方案,没有JQuery或第三方实现.

更新:虽然所提出的大部分内容存在严重的局限性和可用性问题,但// @grant window.close在脚本标题中使用的最新建议(特定于TamperMonkey)通常会在通常无法处理close方法的选项卡上执行此操作.虽然不完全理想,并没有针对每种情况推广,但在我的情况下,这是一个很好的解决方案.

javascript greasemonkey google-chrome tampermonkey

165
推荐指数
8
解决办法
50万
查看次数

错误:拒绝访问属性"处理程序"的权限

我有一个用于Firefox的greasemonkey脚本,昨天它运行得很好.我今天尝试使用它(没有代码被修改),我注意到它停止工作.经过进一步检查,脚本现在抛出以下错误:

Error: Permission denied to access property 'handler'
Run Code Online (Sandbox Code Playgroud)

以下代码块中抛出此错误:

$('body').click(function() {
    // code here
});
Run Code Online (Sandbox Code Playgroud)

这个错误神奇地开始发生在今天脚本工作正常昨天.我不明白为什么只是尝试做一些基本的事情,例如在jQuery中添加事件处理程序时发生这种错误.

我的脚本使用的jQuery已经在脚本执行的页面中使用,因此我使用此代码使GM可以访问:

var $ = unsafeWindow.jQuery;
Run Code Online (Sandbox Code Playgroud)

如果需要,可供参考,以下是我在脚本中使用的以下Greasemonkey函数:

// @grant       GM_getResourceText
// @grant       GM_addStyle
// @grant       GM_xmlhttpRequest
// @grant       GM_getResourceURL
Run Code Online (Sandbox Code Playgroud)

我试过研究这个错误,我找不到任何答案.所有看起来可能有用的问题都涉及iframe,并且在我的代码或运行的网站中找不到单个iframe.我也尝试删除并重新安装脚本,但没有解决问题.

javascript firefox jquery greasemonkey

11
推荐指数
2
解决办法
8513
查看次数

window.onload在Firefox + Greasemonkey脚本中有效但在Chrome用户脚本中无效吗?

有一个页面http://example.com/1.php像往常一样包含javascript文件:

<script type="text/javascript" src="/util.js?1354729400"></script>
Run Code Online (Sandbox Code Playgroud)

这个文件包含名为exampleFunction的函数,我需要在我的用户脚本中使用它.我还有一个用户脚本:

// ==UserScript==
// @name          SomeName
// @namespace     http://example.com/userscripts
// @description   Greets the world
// @include       http://example.com/*
// ==/UserScript==
window.onload = function () {
        console.log(exampleFunction);
      alert("LOADED!");
}
Run Code Online (Sandbox Code Playgroud)

在Firefox中完美运行并在Chrome中返回错误:

Uncaught ReferenceError: exampleFunction is not defined 
Run Code Online (Sandbox Code Playgroud)

我如何使其工作?

javascript greasemonkey google-chrome cross-browser userscripts

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

如何在Chrome中模仿Greasemonkey/Firefox的unsafeWindow功能?

我现在正在摆弄chrome中的用户脚本,所以请忍受我潜在的无知/白痴.

在我正在编写脚本的页面中,有一个<script>声明变量的元素x.这是否意味着,在我的用户脚本中,我只能x从全局命名空间访问?

例如,如果我的用户脚本中的唯一一行是alert(x);,那应该按预期工作(假设x是一个字符串)?我知道chrome不支持unsafewindow,但由于某种原因,我发现无法弄清楚如何模仿功能.它甚至可能吗?

javascript greasemonkey google-chrome

6
推荐指数
3
解决办法
7681
查看次数

为什么script.onload无法在Chrome用户手册中使用?

我想使用用户脚本在站点中加载另一个脚本文件.但是,js.onload事件无法正常工作.

用户脚本文件:

// ==UserScript==
// @name           Code highlight
// @description    Test
// @include        http://localhost/*
// @version        1.0
// ==/UserScript==

var js = document.createElement('script');
    js.src = "http://localhost/test/js/load.js";
    document.getElementsByTagName("head")[0].appendChild(js);
    js.onload = function(){
        console.log(A)
    }
Run Code Online (Sandbox Code Playgroud)

load.js文件:

var A = {
    name:'aa'
}
Run Code Online (Sandbox Code Playgroud)


在Chrome中,控制台输出"undefined",但load.js已完全加载.

我在Firefox中进行了测试,输出A正确.

javascript google-chrome script-tag userscripts

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

设置@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
查看次数

从浏览器控制台访问 Greasemonkey/Tampermonkey 变量?

这是来自用户脚本的代码示例:

var ExampleObj = {
  somevar1:'value1',
  somevar2:'value2',
  somevar3:'value3',
  somefunction1:function(){
    //do sth
  },
  somefunction2:function(){
    //do sth else
  }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试从脚本调用我的函数时:一切正常,但我无法从浏览器控制台访问:

(参考错误:未定义 ExampleObj)


我的 Greasemonkey/Tampermonkey 设置(元数据):

// ==UserScript==
// @name     [this is my secret]
// @version  1
// @run-at document-end
// @include [this is my secret]
// @grant    none
// ==/UserScript==
Run Code Online (Sandbox Code Playgroud)

脚本有效;我只需要从浏览器控制台访问这些功能。

javascript greasemonkey tampermonkey browser-console

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

如何使用javascript双击对象?我必须两次.click()吗?

我尝试搜索这个,但是出现的唯一结果是双击,而不是如何自动双击某些东西.(触发双击.)

我可以点击一次,并尝试两次"创建"双击但失败.我假设这是因为时间,这就是为什么我设置一个计时器,看看我的双击之间有多少时间.

是否有双击的自动方式?我没有使用jQuery所以请在答案中避免使用它.

所以我点击使用:

document.getElementyById("somethinbg").click();
Run Code Online (Sandbox Code Playgroud)

我尝试双击:

document.getElementById("something").dblclick(); 
Run Code Online (Sandbox Code Playgroud)

没有成功.

javascript double-click tampermonkey

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

如何使用 JavaScript 观察 URL 的变化?

Window 事件文档popstate说明:

请注意,仅调用history.pushState()or history.replaceState()不会触发popstate事件。该 popstate事件将通过执行浏览器操作触发,例如单击后退或前进按钮(或调用history.back()history.forward()在 JavaScript 中)。

我需要一种在 URL 更改时通过不触发popstate事件的方式(例如history.replaceState())来执行某些代码的方法。最好使用 MutationObserver API [1],并且绝对不要每 x 秒轮询一次 URL。

此外,hashchange不会这样做,因为我必须对URL 中的每个更改采取行动,而不仅仅是哈希部分。

那可能吗?


[1]在另一个问题上解释为什么 MutationObserver API 对此不起作用。


(其他)相关问题:

javascript events mutation-observers

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

如何从浏览器的 JS 控制台控制 Tampermonkey 脚本的功能?

我用以下代码编写了 Greasemonkey/Tampermonkey 脚本:

var on = true;
function doSomething(){
   if(on){
      //do stuff
   }
}
setInterval(doSomething,1000);
Run Code Online (Sandbox Code Playgroud)


通常该功能是活动的,但在某些情况下,我想从浏览器中的 JavaScript 控制台禁用它。
我不想在网页上添加额外的切换按钮。

我怎样才能实现这个目标?在控制台中输入on = true不起作用,因为on“未定义”。

javascript console greasemonkey tampermonkey

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

如何使用用户脚本覆盖函数?

我想更改网页显示的部分内容,是否可以用usercript覆盖一个函数?

下面是我想覆盖的功能(也可以在这里找到):

function StartDrawing() {
    if ((typeof (systemsJSON) != "undefined") && (systemsJSON != null)) {
        var stellarSystemsLength = systemsJSON.length;
        $('#mapDiv').empty();
        if (stellarSystemsLength > 0) {
            InitializeRaphael();

            var i = 0;
            for (i = 0; i < stellarSystemsLength; i++){
                var stellarSystem = systemsJSON[i];
                DrawSystem(stellarSystem)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将允许我运行自己的绘图算法.

如何使用chrome(或Firefox)中的用户脚本执行此操作?

javascript userscripts

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

为什么将 grant 从 none 更改为 GM_xmlhttpRequest 会破坏我的代码?

简而言之,我不想将警报 URL 和响应正文发送到我的应用程序。此代码有效,但除非我授予它,否则我无法使用 GM_xmlhttpRequest。

不做任何改变,代码就会神奇地崩溃。我不确定发生了什么变化以及如何修复它。我以为我可以使用console.log数据并将其复制/粘贴到我的应用程序中,但 Facebook 禁用了 console.log。

我想过做 xmlhttpRequest 但这也被某种方式阻止了。我通过在控制台中执行代码进行测试。这 3 行似乎在除了 Facebook 域之外的任何地方都有效。我认为这与CORS有关。

// ==UserScript==
// @name        FBTest
// @namespace   test
// @include     https://*.facebook.com/*
// @version     1
// @grant       none
// ==/UserScript==
//change none to GM_xmlhttpRequest
(function() {
    var proxied = window.XMLHttpRequest.prototype.open;
    window.XMLHttpRequest.prototype.open = function(method, url) {
        alert(url);
        return proxied.apply(this, [].slice.call(arguments));
    }; 
})();
Run Code Online (Sandbox Code Playgroud)

javascript greasemonkey facebook userscripts tampermonkey

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

从 Greasemonkey 脚本访问安全 cookie?

无论如何可以从 Greasemonkey 脚本访问安全 cookie?
我编写了使用该document.cookie.split函数的脚本。它返回一个 cookie 列表,但不包括安全 cookie。

cookies firefox greasemonkey firefox-addon cookie-httponly

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