Javascript 如何使用用户脚本覆盖警报功能?

Javascript 如何使用用户脚本覆盖警报功能?,javascript,alert,greasemonkey,userscripts,tampermonkey,Javascript,Alert,Greasemonkey,Userscripts,Tampermonkey,在站点上有这样的代码(其站点位于LAN上) 但是我看到了警报并得到了这个错误 Error: uncaught exception: [Exception... "Component is not available" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: file:///C:/Documents%20and%20Settings/arokitnicki/Dane%20aplikacji/M

在站点上有这样的代码(其站点位于LAN上)

但是我看到了警报并得到了这个错误

Error: uncaught exception: [Exception... "Component is not available"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: file:///C:/Documents%20and%20Settings/arokitnicki/Dane%20aplikacji/Mozilla/Firefox/Profiles/sm4bsods.default/extensions/%7Be4a8a97b-f2ed-450b-b12d-ee082ba24781%7D/components/greasemonkey.js :: anonymous :: line 377"  data: no]
如何禁用该警报

另外,这不是一个javascript问题,而是一个油腻的问题

编辑:

它公司的网站,所以我不能粘贴真正的代码

<head>
    <script>    
        dojo.require("dojo.back");
        dojo.back.init(); 
    </script>
</head>
<body onload="someMethod()">
    <iframe></iframe>
    <script>         
        alert("bla");
    </script>
</body>

dojo.require(“dojo.back”);
dojo.back.init();
警报(“bla”);

标题中还有一些脚本和CSS声明。

更新:对于Tampermonkey、Violentmonkey、Greasemonkey的现代版本(但强烈建议避免使用GM 4+):
在大多数情况下,您可以使用
@run-at-document start
截获
alert()
。例如,加载此脚本,然后访问:


请注意,如果您正在运行Tampermonkey,您可以切换到
注入模式:即时

Tampermonkey设置=>配置模式:
高级
=>实验=>注入模式:
即时


如果脚本需要GM_uuu函数,则必须将
@grant
设置为“无”。在这种情况下,请像这样使用
exportFunction()

// ==UserScript==
// @name            _Overwrite Alert
// @match           *://output.jsbin.com/*
// @grant           GM_addStyle
// @run-at          document-start
// ==/UserScript==

function myAlert (str) {
    console.log ("Greasemonkey intercepted alert: ", str);
}
unsafeWindow.alert   = exportFunction (myAlert, unsafeWindow);


对于2011年8月之前的Greasemonkey,旧答案是:
unsafeWindow.alert=function(){}在选定的情况下工作正常

但是,如果这确实是页面上的代码,那么您将无法使用Greasemonkey停止该警报

这是因为该警报将在页面加载期间和
DOMContentLoaded
事件之前触发——此时会触发Greasemonkey


加载此GM脚本:

// ==UserScript==
// @name            Overwrite Alert
// @description     Overwrites alert()
// @include         http://jsbin.com/*
// ==/UserScript==

unsafeWindow.alert=function() {};

然后访问:

检查代码(),您将看到3个警报。Greasemonkey只能停止加载时发出的警报(通常)

其他因素可能会阻碍通用汽车停止警报的能力。。。页面加载太快,或者可能是闭包


在pastebin.com上粘贴该页面的源代码,如果可能,请不要编辑。也许你还能做些别的事。也许可以通过adblock阻止脚本


否则,您必须编写扩展/附加组件。

更新:对于Tampermonkey、Violentmonkey、Greasemonkey的现代版本(但强烈建议避免使用GM 4+):
在大多数情况下,您可以使用
@run-at-document start
截获
alert()
。例如,加载此脚本,然后访问:


请注意,如果您正在运行Tampermonkey,您可以切换到
注入模式:即时

Tampermonkey设置=>配置模式:
高级
=>实验=>注入模式:
即时


如果脚本需要GM_uuu函数,则必须将
@grant
设置为“无”。在这种情况下,请像这样使用
exportFunction()

// ==UserScript==
// @name            _Overwrite Alert
// @match           *://output.jsbin.com/*
// @grant           GM_addStyle
// @run-at          document-start
// ==/UserScript==

function myAlert (str) {
    console.log ("Greasemonkey intercepted alert: ", str);
}
unsafeWindow.alert   = exportFunction (myAlert, unsafeWindow);


对于2011年8月之前的Greasemonkey,旧答案是:
unsafeWindow.alert=function(){}在选定的情况下工作正常

但是,如果这确实是页面上的代码,那么您将无法使用Greasemonkey停止该警报

这是因为该警报将在页面加载期间和
DOMContentLoaded
事件之前触发——此时会触发Greasemonkey


加载此GM脚本:

// ==UserScript==
// @name            Overwrite Alert
// @description     Overwrites alert()
// @include         http://jsbin.com/*
// ==/UserScript==

unsafeWindow.alert=function() {};

然后访问:

检查代码(),您将看到3个警报。Greasemonkey只能停止加载时发出的警报(通常)

其他因素可能会阻碍通用汽车停止警报的能力。。。页面加载太快,或者可能是闭包


在pastebin.com上粘贴该页面的源代码,如果可能,请不要编辑。也许你还能做些别的事。也许可以通过adblock阻止脚本

否则,您将不得不编写一个扩展/附加组件。

如果使用,则以下操作将始终有效:

// ==UserScript==
// @id              alert-killer-test@erikvold.com
// @name            Overwrite Alert
// @description     Overwrites alert()
// @include         *
// @run-at          document-start
// ==/UserScript==

unsafeWindow.alert=function() {};
您可以。

如果使用,则以下操作将始终有效:

// ==UserScript==
// @id              alert-killer-test@erikvold.com
// @name            Overwrite Alert
// @description     Overwrites alert()
// @include         *
// @run-at          document-start
// ==/UserScript==

unsafeWindow.alert=function() {};

你可以。

@01,那代码
..
放在一页的正文中,你想用Greasemonkey中止吗?@01,那代码
..
放在一页的正文中,你想用Greasemonkey中止吗?是的,这是正确的,只是不知道这是否是他的真正意思。我已经粘贴了代码。我会看看adblock,thx的建议。如果您还有其他想法,请与我们分享。@01,是的,因为它是在GM之前执行的。@01:由于您的警报被编码到正文中并以内联方式触发,GM无法阻止它。因为它不是从文件加载的,所以adblock无法阻止它。几乎你唯一的选择就是一个浏览器插件,它在页面下载时重写/过滤HTML。事实上,由于这是一个局域网,可用性极低,请向经理和IT员工投诉。你可能会在.thx上找到很多弹药,我的公司不关心可用性,但我不经常使用那个页面,所以没关系。如果我觉得无聊,我可能会尝试写附加组件。谢谢你的帮助,现在我更了解通用汽车的工作原理了。是的,这是正确的,只是不知道这是否是他的真正意思。我已经粘贴了代码。我会看看adblock,thx的建议。如果您还有其他想法,请与我们分享。@01,是的,因为它是在GM之前执行的。@01:由于您的警报被编码到正文中并以内联方式触发,GM无法阻止它。因为它不是从文件加载的,所以adblock无法阻止它。几乎你唯一的选择就是一个浏览器插件,它在页面下载时重写/过滤HTML。事实上,由于这是一个局域网,可用性极低,请向经理和IT员工投诉。你可能可以在.thx上找到很多弹药,我的公司不关心可用性,但我不经常使用那个页面,所以我