我从原生NPAPI / XPCOM / ActiveX获得JavaScript的结果。以前用户通过以下方式激活本机GUI:
<h:commandLink styleClass="send-doc-link" value="#{msg.send}" onclick="javascript:signDocument('data');return true;" action="#{internalPayment.sendDocument}"/>用户从加载项GUI退出后,
和JavaScript函数'signDocument'完成执行。
我将本机代码切换为asynhronouse模型。所以JS func'ignoDocument'返回执行imediatly并且最近必须提取结果。
我编写JS代码,如下:
function signDocument(dataTagID, tagID4Event) { var npapi = document.getElementById("npapi"); npapi.Sign(langId, content, desc, ts, sign); mylog("OK"); var scheduler = setInterval( function() { mylog("FAIL"); if (npapi.AddonGetState() != "finished") return; clearInterval(scheduler); out_sign = npapi.SignValue(); fireHTMLEvent(tagID4Event, 'click'); }, 1000); } }
尝试以1秒的间隔获得结果,并通过触发'click'事件模拟链接按下。 所有这些都可以在测试静态HTML测试中正常工作。
我将.jsf文件重写为:
<h:commandLink styleClass="send-doc-link" value="#{msg.send}" onclick="javascript:signDocument('data', 'signDocumentCallbackID');return true;"/> <t:commandLink styleClass="hidden" id="signDocumentCallbackID" forceId="true" onclick="return true;" action="#{internalPayment.sendDocument}"/>
我希望调度程序获取结果和触发事件。但调度程序不会被调用,因为在用户点击第一个链接(可见)之后,JS调用本机代码,为GUI创建单独的线程并将执行返回给JS。下一页重新加载并且似乎所有JS对象都死于页面死亡(我通过'mylog'func检查这个)。
确实首先将h:commandLink
标记转换为:
<a href="#" onclick="var cf = function(){javascript:signDocument('data', 'signDocumentCallbackID');return true;};var oamSF = function(){return oamSubmitForm('j_id_jsp_179411707_1','j_id_jsp_179411707_1:j_id_jsp_179411707_5');};return (cf()==false)? false : oamSF();" class="send-doc-link">...
所以我的JS代码添加了oamSubmitForm
,它似乎重新加载了我的页面并删除了sheduler。
如何将特殊代码包含到onclick=""
?
答案 0 :(得分:2)
如果您不需要使用链接调用同步支持Bean操作,则只需将<h:commandLink>
替换为<h:outputLink>
或仅<a>
。
<h:outputLink styleClass="send-doc-link" onclick="signDocument('data', 'signDocumentCallbackID')">
<h:outputText value="#{msg.send}" />
</h:outputLink>
或
<a href="#" styleClass="send-doc-link" onclick="signDocument('data', 'signDocumentCallbackID')">
<h:outputText value="#{msg.send}" />
</a>
请注意,javascript:
伪协议和return true;
完全是多余的。两者都是默认值。您可能也会使用return false;
代替,以便阻止链接的默认操作(转到页面顶部)。