我们的Web应用程序存在问题(JSF 1.2 + Ajax4jsf 1.1)。我们收到以下错误
**Message: Permission denied
Line: 27
Char: 222
Code: 0
URI: http://uat.example.com/ABC/a4j.res/org.ajax4jsf.framework.ajax.AjaxScript.jsf**
这个问题是零星的,有50%的时间都会发生。 在所有其他浏览器中仅在IE8上发生我们没有看到此问题。 发生此错误时,整个页面都会消隐。如何刷新使页面恢复。
我们确实经历了几篇关于IE QUIRK VS标准模式的文章。 Force IE8 Into IE7 Compatiblity Mode 没有帮助。
注意:这不是跨站点脚本问题,因为脚本(由JSF生成)与安装我们的应用程序的域相同。
如果有人解决了这个问题,请告诉我们。 我看到一个人发布了类似的问题 http://www.coderanch.com/t/490213/JSF/java/support-IE
答案 0 :(得分:1)
找到了解决问题的方法。修改了ajax4jsf-1.1.0.jar
根本原因:在IE-8的情况下,响应是从Ajax对象获取的,尽管尚未读取响应。所以我们通过检查状态== 200和readystate = 4来添加IE的修复。
这是我们做的 打开jar中的\ org \ ajax4jsf \ framework \ ajax \ scripts \ AJAX.js下的AJAX.js
第1步。 改变自:
getResponseText : function(){
return this._request.responseText;
}
TO:
getResponseText : function(){
if (this._request.readyState == 4){
if (this._request.status == 200) {
return this._request.responseText;
}
}
}
步骤2.查找此方法并进行更改 FROM:
window.setTimeout(function() {
var isDocOpen=false;
//This functions has few more lines , I have not pasted all code here...
更改为:
//This is the Fix for IE....The isIE variable is pre defined inside the script.
if (isIE){
if (req.readyState == 4){
if (req.status == 200) {
window.document.open(req.getContentType(),true);
isDocOpen=true;
window.document.write(req.getResponseText());
window.document.close();
}
}
}
else {
//This is the Original code...
//Keep this for all other browsers...
window.document.open(req.getContentType(),true);
isDocOpen=true;
window.document.write(req.getResponseText());
window.document.close();
}
.......其余代码应遵循原始脚本。
第3步:
//COMMENT OUT THIS ORIGINAL CODE. Not sure why this reloading is done for IE
//this was causing IE to send requests...more than once..
//if(isIE){
/ For Ie , scripts on page not activated.
// window.location.reload(false);
//}
一旦我们进行了上述更改,我们使用win rar并将Ajax.js文件放回ajax4jsf-1.1.0.jar,现在IE 8的问题得到了解决。
希望它可以帮助那些人。