我很难找到替换javascript函数的方法,javascript函数被定义为对象的属性。我在googled上搜索了2天,查看了堆栈溢出中与用javascript重写函数相关的所有问题,但没有一个解决方案有效。我目前有一个网页(如果有帮助的话,可以使用http://gefs-online.com),并且有一个名为"multiplayer“的对象在类似的地方声明:
var multiplayer = window.multiplayer || {};在此之后,在multiplayer中有一些属性声明如下:
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(),它声明如下:
multiplayer.loadModel = function(oPlayer, oData, lod, callbackFunction) {
... //the code of the function
};现在我想使用GreaseMonkey覆盖这个函数,但没有成功。我不能使用常规的unsafeWindow方法--因为它不能工作,即使它能工作,也只有火狐支持它。
我已经阅读了所有与这个主题相关的问题,但仍然没有发现任何问题,所以请不要把它打分。
感谢帮助我的人。
更新:--我再次尝试像这样实现unsafeWindow:
unsafeWindow.multiplayer.loadModel = function (oPlayer, oData, lod, callbackFunction) {
console.log ("loadModel()");
}但它只写着:"ReferenceError: unsafeWindow没有定义“
发布于 2015-11-16 20:06:26
最终,==UserScript==的定义是错误的。在使用Greasemonkey (Firefox)时,应该如下所示:
// @grant none但是当使用Tamper猴子/ViolentMonkay (Chrome/Opera)时,应该是这样的:
// @grant unsafeWindow发布于 2015-08-17 01:15:24
// ==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);https://stackoverflow.com/questions/31831816
复制相似问题