0

你们有人可以帮我找到这个问题吗?

我有一个包含客户端 js 代码的 xpage,当您决定离开该页面时应该执行它。在客户端 js 中,您引用一个按钮并自动单击它。此按钮包含一些服务器端 js 代码,并将文档中的标志从(“由...打开”更改为“”)。

问题是客户端 js 在除当前 IE (10.0.5) 之外的所有不同浏览器中都无法工作,并引发错误:

unable to load http://urlofthedocument/... status:0

有趣的是,当我在 click() 方法之后插入一个 alert() 方法时,每个浏览器都可以正常工作。但由于我不想包含这个警告声明,我发现必须有一些不同的东西来避免这种情况。(短暂的停顿而不是警报方法也不起作用。)

我的 CS JS 代码:

window.onbeforeunload = WarnEditMode;

function WarnEditMode(){
    if(needUnloadConfirm == true){
        var el = window.document.getElementById("#{id:Hidden4SSJS}");
        el.click();
        //document.open();
        //document.write(el);
        //document.close();
        //alert("You're about to leave the page");
        //pause(5000);

    }
}

function pause(millis){
    var date = new Date();
    var curDate = null;
    do { curDate = new Date(); }
    while(curDate-date < millis)
}

这里指的是按钮,点击后会执行下面的 SS JS 代码:

try{
    print("Hidden4SSJS-Button-Test @ Person");
    var db:NotesDatabase = database;
    var agt:NotesAgent;
    var doc:NotesDocument = XPPersonDoc.getDocument()

    agt = db.getAgent("(XPUnlockDocument)");
    agt.run(doc.getNoteID());
}catch(e){
    _dump(e);
}

你们可以帮我解决这个问题吗?

4

1 回答 1

1

我会使用带有隐藏计算字段(而不是您的特殊按钮)的 XSP 对象来执行此操作...

像这样的东西:

function WarnEditMode(){
   if(needUnloadConfirm == true){
      XSP.partialRefreshGet("#{id:unlockDocCF1}", {
         params: {
            '$$xspsubmitvalue': 'needToUnlock'
         },
         onComplete: function () {
            alert('You are about to leave this page and the document has been unlocked.');
         },
         onError : function (e) {
            alert('You are about to leave this page and the document has NOT been unlocked.\n' + e);
         }
      );
   }
  pause(5000);
}

然后计算字段的 javascript 将是这样的:

try{
    var sval = @Explode(context.getSubmittedValue(), ',');
    if (sval == null) return result + " no action.";
    if (!"needToUnlock".equals(sval[0])) return result + " no action.";

    print("Hidden4SSJS-Button-Test @ Person");
    var db:NotesDatabase = database;
    var agt:NotesAgent;
    var doc:NotesDocument = XPPersonDoc.getDocument()

    agt = db.getAgent("(XPUnlockDocument)");
    agt.run(doc.getNoteID());
    return 'document unlocked.';
}catch(e){
    _dump(e);
}
于 2013-05-21T15:42:38.563 回答