我有点陷入一个我无法解决的问题,我在互联网和本网站上进行了调查,但我无法找到问题的答案。
所以基本上我有一个javascript文件,我无法修改,所以我有另一个javascript文件,它应该在调用时捕获该方法并覆盖它。
通常我知道它是如何工作的,我已经完成了功能覆盖,但我不知道如何解决这个问题。
我有一个非常大的剧本,但我只会展示一小部分:
Microsoft.Office.Server.Ajax.NavResizer.prototype = {
$6: null,
$7: null,
......
$20:function ($p0) {
if (this.$1E) {
$p0.preventDefault();
}
},
$21: function ($p0) {
var $0 = $p0.target;
this.$1F = ($0 === this.$A);
if (this.$1F || $0 === this.$B) {
this.$1E = $0;
this.$18 = $p0.clientX;
this.$19 = $p0.clientY;
Sys.UI.DomEvent.removeHandler(this.$1E, 'mousedown', this.$12);
var $1 = document.body; Sys.UI.DomEvent.addHandler($1, 'mouseup', this.$13);
Sys.UI.DomEvent.addHandler($1, 'mousemove', this.$14);
$1.style.cursor = (this.$1F) ? 'e-resize' : 'n-resize';
this.$1A = this.get_$42();
this.$1B = this.get_$43();
$1.focus();
Sys.UI.DomEvent.addHandler($1, 'selectstart', this.$15);
$p0.preventDefault();
}
},
$22: function ($p0) {
this.$34($p0);
var $0 = document.body;
Sys.UI.DomEvent.removeHandler($0, 'mouseup', this.$13);
Sys.UI.DomEvent.removeHandler($0, 'mousemove', this.$14);
Sys.UI.DomEvent.addHandler($0, 'selectstart', this.$15);
$0.style.cursor = 'default';
Sys.UI.DomEvent.addHandler(this.$1E, 'mousedown', this.$12);
this.$1E = null;
},
$23: function ($p0) {
this.$34($p0);
},
$24: function ($p0) {
this.$26();
},
....
基本上这是脚本的一部分:所以我想在另一个javascript文件的脚本中覆盖函数: $ 22:function($ p0),我该怎么做?< / p>
我将不胜感激。
一个小小的更新,提供了一些很好的例子,但它们没有用。 运行此sript的环境是SharePoint,通常在我覆盖时使用此方法:
var oldFixRibbonAndWorkspaceDimensions = window.FixRibbonAndWorkspaceDimensions;
window.FixRibbonAndWorkspaceDimensions = function () {
this.MyFixRibbonAndWorkspaceDimensions();
};
function MyFixRibbonAndWorkspaceDimensions(){...}
当我加载脚本时无关紧要,因为只有当默认函数被调用时才调用此函数。就在同一时间。但是使用此处提供的示例,该函数正尝试在document.ready()
上执行答案 0 :(得分:2)
您想要永久覆盖吗?就这样做:
Microsoft.Office.Server.Ajax.NavResizer.prototype.$22 = function($p0) {
// your code.
};
只要在定义原始文件后执行脚本,就可以了。
答案 1 :(得分:2)
旧帖子..但这对我有用:
ExecuteOrDelayUntilScriptLoaded(overrideNavResizer, "NavResizer.js");
function overrideNavResizer(){
Microsoft.Office.Server.Ajax.NavResizer.prototype.$22 = function($p0) {
// your code.
};
}
答案 2 :(得分:1)
在新脚本中:
Microsoft.Office.Server.Ajax.NavResizer.prototype.$22 = function () {//your function code}
答案 3 :(得分:1)
假设您可以访问原型对象(它在全局范围内)并且脚本在它之后运行,那很容易:
var proto = Microsoft.Office.Server.Ajax.NavResizer.prototype,
oldMethod = proto.$22;
proto.$22 = function newMethod(args, …){
…
};