2012-06-22 5 views
0

Мы имеем проблему с веб-приложения (JSF 1.2 + Ajax4jsf 1,1) .Мы получить следующее сообщение об ошибкеОтказано org.ajax.4jsf.framework.ajax.AjaxSxript.jsf + IE8

**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 во всех других браузерах, мы не видим этой проблемы. При возникновении этой ошибки вся страница заглатывает. Однако Refresh возвращает страницу назад.

Мы рассмотрели пару статей, касающихся стандартного режима IE QUIRK VS. Force IE8 Into IE7 Compatiblity Mode Не помогло.

ПРИМЕЧАНИЕ. Это не проблема межсайтового сценария как домена, где скрипт (сгенерированный JSF) - это тот же домен, где установлено наше приложение.

Пожалуйста, сообщите нам, если кто-то решил эту проблему. я вижу подобную проблему, размещенной на какой-то один http://www.coderanch.com/t/490213/JSF/java/support-IE

ответ

1

Найдено исправление к problem.Fixed путем изменения Ajax4jsf-1.1.0.jar

первопричины: В случае IE-8 ответ будучи извлеченным из объекта Ajax, хотя ответ еще не прочитан. Поэтому мы добавили исправление для IE, проверив статус == 200 и readystate = 4.

Вот что мы сделали Open ajax.js, который находится в папке \ орг \ Ajax4jsf \ Framework \ Аякса \ Сценарии \ 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. Смотрит для этого метода и изменения ОТ:

 window.setTimeout(function() { 
    var isDocOpen=false; 
    //This functions has few more lines , I have not pasted all code here... 

Изменение TO:

//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); 
//} 

После того, как мы сделали выше изменения, мы использовали победу .rar и уронили ajax.js файл обратно в Ajax4jsf-1.1.0.jar и теперь IE 8 боль была решена.

Надеюсь, что это поможет кому-то там.