首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GreaseMonkey替换对象中的javascript函数

使用GreaseMonkey替换对象中的javascript函数
EN

Stack Overflow用户
提问于 2015-08-05 11:55:20
回答 2查看 1.2K关注 0票数 0

我很难找到替换javascript函数的方法,javascript函数被定义为对象的属性。我在googled上搜索了2天,查看了堆栈溢出中与用javascript重写函数相关的所有问题,但没有一个解决方案有效。我目前有一个网页(如果有帮助的话,可以使用http://gefs-online.com),并且有一个名为"multiplayer“的对象在类似的地方声明:

代码语言:javascript
复制
var multiplayer = window.multiplayer || {};

在此之后,在multiplayer中有一些属性声明如下:

代码语言:javascript
复制
multiplayer.nbUsers = 0;
multiplayer.users = {};
multiplayer.visibleUsers = {};
multiplayer.minUpdateDelay = 500;
multiplayer.updateTimeout = null ;
multiplayer.hearbeatTimeout;
multiplayer.hearbeatLife = 9000;
multiplayer.userLife = 10000;
multiplayer.userHalfLife = 4000;
multiplayer.mapUpdatePeriod = 10000;
multiplayer.myId = '';
multiplayer.lastRequest = null ;
multiplayer.lastRequestTime = 0;
multiplayer.localTime = new Date().getTime();
multiplayer.farVisibilityRange = 10000;
multiplayer.lowVisibilityRange = 1000;
multiplayer.nearVisibilityRange = 20;
multiplayer.chatMessage = '';
multiplayer.chatMessageId = 0;
multiplayer.on = false;
multiplayer.started = false;
multiplayer.callsignPlacemarkAltitude = 4;
multiplayer.updateFunctions = [];
multiplayer.init = function() {};

我愿意覆盖的函数是multiplayer.loadModel(),它声明如下:

代码语言:javascript
复制
multiplayer.loadModel = function(oPlayer, oData, lod, callbackFunction) {
    ... //the code of the function
};

现在我想使用GreaseMonkey覆盖这个函数,但没有成功。我不能使用常规的unsafeWindow方法--因为它不能工作,即使它能工作,也只有火狐支持它。

我已经阅读了所有与这个主题相关的问题,但仍然没有发现任何问题,所以请不要把它打分。

感谢帮助我的人。

更新:--我再次尝试像这样实现unsafeWindow:

代码语言:javascript
复制
unsafeWindow.multiplayer.loadModel = function (oPlayer, oData, lod, callbackFunction) {
    console.log ("loadModel()");
}

但它只写着:"ReferenceError: unsafeWindow没有定义“

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-16 20:06:26

最终,==UserScript==的定义是错误的。在使用Greasemonkey (Firefox)时,应该如下所示:

代码语言:javascript
复制
// @grant        none

但是当使用Tamper猴子/ViolentMonkay (Chrome/Opera)时,应该是这样的:

代码语言:javascript
复制
// @grant        unsafeWindow
票数 0
EN

Stack Overflow用户

发布于 2015-08-17 01:15:24

代码语言:javascript
复制
// ==UserScript==
// @name         Multiplayer
// @version      1
// @description  http://stackoverflow.com/questions/31831816
// @include      http://gefs-online.com/map.html*
// @grant        none
// @run-at       document-end
// ==/UserScript==

var interval = setInterval(function () {
    if(window.multiplayer && window.multiplayer.loadModel) {
        clearInterval(interval);
        window.multiplayer.loadModel = function (oPlayer, oData, lod, callbackFunction) {
            console.log("loadModel()");
        };
        console.log("multiplayer.loadModel changed to: ");
        console.log(window.multiplayer.loadModel.toString());
    }
}, 1000);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31831816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档