相关疑难解决方法(0)

有人在nsf中使用javascript原型后如何在Domino服务器中清理SSJS?

如果有人在nsf中使用javascript原型,如何清理Domino服务器中的SSJS(服务器端Javascript)?

马克·罗登发现了XPage SSJS的一个巨大弱点 :(感谢David Leedy告诉我这件事并向我展示这篇文章).

如果您有以下SSJS代码:

var dummyObj = {}
dummyObj.prototype.NAME = "Johann"
Run Code Online (Sandbox Code Playgroud)

XPages SSJS并不关心你使用var(var表示变量必须是本地的),它使dummyObj.NAME在整个服务器中可见,其值为Johann.因此,如果同一服务器中的另一个nsf使用具有相同名称的var,则它将继承整个原型:

var dummyObj = {}
println(dummyObj.NAME) /*prints "Johann" */ 
Run Code Online (Sandbox Code Playgroud)

这是一个巨大的错误(一个使得不可靠的XPage SSJS IMO).即使你根本不使用原型,如果他的应用程序中的其他人做了类似这样的事情:

String.prototype.split = function(){ return "I broke this method" }
Run Code Online (Sandbox Code Playgroud)

它将破坏使用无辜split()的同一服务器中的所有应用程序.

所以,问题是:如果有人"错误地"在NSF中写下以下SSJS(XPages服务器端Javascript):

String.prototype.split = function(){ return "I broke this method" }
Run Code Online (Sandbox Code Playgroud)

如何将String.prototype.split()修复为原始值?

正如Mark Roden所说,重启HTTP任务并不能解决问题.

////////////////////////////////////////////////// /////////

编辑1:为什么我认为这是一个巨大的错误:

我是Javascript粉丝但IMHO @MarkyRoden在SSJS中发现了一个巨大的错误.垫片和填充物实际上不是主要问题.Eval被认为是一种不好的做法,但原型对象是基本Javascript的基本元素.这是向Javascript类添加方法的标准和首选方法,它还需要继承和各种OOP内容.因此,您需要在服务器级别使用某种命名空间以避免冲突.所有这些都非常糟糕,但最大的问题是,一个应用程序中的一行代码可能会破坏服务器中的所有应用程序.是的,您可以信任您的开发人员,但其中一人可能会错误地编写错误的行,并且Domino服务器也可以拥有来自不同软件供应商的数百个应用程序.在代码审查中设置责任不是一个可靠的程序.也许是时候在SSJS中拥有一个真正的javascript引擎,比如V8,Spidermonkey,Chakra或Rhino.作为一种解决方法,我正在思考Tommy Valand 在SSJS中与Rhino想法.

编辑2:情况更糟.你可以这样做:

prototype.importPackage = null
Run Code Online (Sandbox Code Playgroud)

要么

prototype.Array = null
Run Code Online (Sandbox Code Playgroud)

正如你在@SvenHasselbach的文章中看到的那样:http …

prototype lotus-notes lotus-domino xpages xpages-ssjs

11
推荐指数
1
解决办法
850
查看次数

SSJS在java类中调用一个方法(在java库中)

我用java类(Invoke)创建了一个java库(名为:invoke).在设计器导航窗格中的代码下扩展脚本库时可以看到它.

代码是:

package com.kkm.vijay;   

public class Invoke {

    public static void main(String[] args) {

        Runtime r = Runtime.getRuntime();
        Process p = r.exec("C://some.exe");

    }
}
Run Code Online (Sandbox Code Playgroud)

将以下ssjs用于按钮onclick事件,在浏览器中预览时显示Error:500.

importPackage(com.kkmsoft.vijay);
var v=new Invoke();
v.main();
Run Code Online (Sandbox Code Playgroud)

甚至我在类中使用了一个函数,并将ssjs的最后一行更改为v.fn().然而同样的问题.

xpages xpages-ssjs

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