onclick in jsf commandbutton不能用于chrome

时间:2013-02-16 04:39:49

标签: javascript jsf-2 http-post xss

我通过<h:commandButton>事件在onclick中调用JavaScript。

 <h:commandButton type="submit" 
          value="Next" action="#{bean.save}"    
          onclick="javascript:getHtml();"/>

 function getHtml(){
      document.getElementById('source').value="HTML source of the page";

  }

在IE / Firefox中输出commandButton的HTML

<input id="Form:submit" name="Form:submit" 
           type="submit" value="Next"
           onclick="var cf = function(){getHtml();};var oamSF = function(){return 
myfaces.oam.submitForm('Form','Form:submit',null,[['sample','sample']]);};return (cf.apply(this, [])==false)? false : oamSF.apply(this, []);">

但在chrome中,我在下面的HTML

中看到了以下JavaScript错误

Refused to execute a JavaScript script. Source code of script found within request.

<input id="Form:submit" name="Form:submit" 
       type="submit" value="Next" 
       onclick="" >  // onclick is empty

当我浏览论坛时,我发现这是为了防止在onclick POST时出现此问题所解释的跨站点脚本

Refused to execute a JavaScript script. Source code of script found within request

  

当一些JavaScript代码通过一个发送到服务器时会发生这种情况   HTTP POST请求,并通过HTTP响应返回相同的代码。   如果Chrome检测到这种情况,则拒绝运行脚本,并且   您收到错误消息拒绝执行JavaScript脚本。   请求中找到的脚本源代码。

我该如何解决这个问题?我正在使用JSF 2.0和Apache myfaces实现。

1 个答案:

答案 0 :(得分:2)

怎么样

<h:commandButton type="submit" 
      value="Next" action="#{bean.save}"    
      onclick="document.getElementById('source').value='HTML source of the page'; 
      return false;"/>

如果这对你有效,那么你没有在你的页面/项目中正确包含或放置你的js文件......


更好的解决方案是正确包含您的js文件

像这样

<h:outputScript name="js/myFile.js" target="head"/>

myFile.js 放入 WebContent \ resources \ js

比这样使用

<h:commandButton type="submit" 
      value="Next" action="#{bean.save}"    
      onclick="getHtml(); return false;"/>