2011-07-15 70 views
1

(請不要打擾問爲什麼我們支持IE6。)jQuery的模態對話框,IE6安全不安全的錯誤,HTTPS的SSL

我們使用jQuery模態對話框創建自定義的警報/確認。我用xsl創建了一個div(在這些例子中,我將一些xsl輸出並放入原始html以避免混淆)。該div是使用jQuery觸發的。我編寫了幾個函數(基本上打開對話框,傳遞消息和函數),以便我們可以使用javascript實現新的警報/確認(基本上用alert();替換爲uiAlertError();)。

其中一些信息並不重要。我可以得到更具體的,但這裏的主要問題是,在IE6中我得到一個「這個頁面包含安全和非安全的項目,你想顯示不安全的項目?」錯誤。在ie7,ie8,firefox,safari和chrome中一切正常。

從我讀到的有一些常見的問題,如:http://需要https://(或http:// to //,改爲相對絕對),src是空的,混合的內容等等。所有這些(從我所收集的內容)的基本主題是讓事情加載安全,因爲我們在一個安全的頁面上。但這不是我的問題!我已經將問題分離出來,並且與jQuery相關(我測試了新的代碼;得到了錯誤,評論了新的代碼;錯誤消失了,我取消了註釋xsl,但留下了jQuery註釋掉;錯誤仍然消失了,把jQuery評論回來了,錯誤回來了)。

這裏是JavaScript:

下面是我寫的更換警報功能(); :

function uiAlertError(msg, ok_func){ 
    document.getElementById('alert_id_img').src="images/dialog_warning.png"; 
    uiAlert(msg, ok_func); 
} 
function uiAlertCheck(msg, ok_func){ 
    document.getElementById('alert_id_img').src="images/dialog_check.png"; 
    uiAlert(msg, ok_func); 
} 
function uiAlert(msg, ok_func){ 
    document.getElementById('alert_id_msg').innerHTML = msg; 
    $("#alert_id").dialog("open"); 

    $("#alert_ok").click(function(){ 
     if(ok_func == undefined || ok_func == ''){ 
      $("#alert_id").dialog("close"); 
     }else{ 
      eval(ok_func); 
      $("#alert_id").dialog("close"); 
     } 
    }); 
} 

這裏是jQuery的:

$(function() { 
    $("#alert_id").dialog("destroy"); 

    $("#alert_id").dialog({ 
     width: 325, 
     modal: true, 
     resizable: false, 
     draggable: false, 
     minHeight: 90, 
     autoOpen: false 
    }); 
}); 

我敢肯定它是與我的任何實施的jQuery jQuery的或本身。

此網頁面向公衆主辦。

感謝您的幫助! Tony

+0

什麼都沒有?我也發現,如果我包裝$(function(){});在諸如runMe()的函數中;然後我打電話給runMe();只要我進入uiAlert();它會抑制頁面加載時顯示的錯誤消息。當你執行runMe()時,錯誤消息會加載。功能。這將它隔離爲一小段代碼。 – TonyB

+0

對於將來會遇到這種情況的人:ie7問題涉及瀏覽器插件。無論出於何種原因,都有一個運行'http://'的插件,這就是錯誤使瀏覽器特定的原因。對於ie6,在頁面加載和$(function(){call。)之間似乎存在某種關聯,如果在函數中包裝$(function(){});然後在調用對話框之前調用該包裝函數,你永遠不會得到這個錯誤(在ie6中)。我正在通過另一種解決方案,但這是一個快速修復(hackjob)。 – TonyB

+0

另一個想法:我注意到bgiframe(我認爲是iframe divshim的jQuery版本)初始化(函數($){})(jQuery);反對傳統的$(function(){});或$(document).ready(function(){});.這似乎工作爲了解決這個問題,我只是調整了樣式(我們有一個ie6特定的css文件),我不得不使用float:right ;,調整一些填充,刪除一個屬性,等等。一切正常,ie6 98%正常工作。 – TonyB

回答

0

我有同樣的問題在IE6上使用jquery和xslt + ajax。

問題是破壞。在破壞之前放置一個警報(1),然後在警報(2)之後放置一個警報,您會看到混合安全性發生在兩者之間。

在我的代碼,它看起來是這樣的:

$("#box").dialog("close"); 
    alert(1); 
    $("#box").dialog('destroy').remove(); 
    alert(2); 

我還在尋找對話廢棄的更好的辦法,因爲我使用AJAX,頁面保持周圍,然後#box如果處理不當,你有2個#box實例。

+0

我仍然在那裏銷燬,它沒有問題。 – TonyB

0

我認爲這個問題是一樣的我one in another question - 有一個在jQuery UI的1.8 CSS中的錯誤:

.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; 
    /* http://bugs.jqueryui.com/ticket/7233 
    - Resizable: resizable handles fail to work in IE if transparent and content overlaps 
    */ 
    background-image:url(data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=); 
} 

不僅IE6和7不支持數據的URI,但任何此類基地64字符串被IE視爲非安全資源。

替換爲這一行:

background-image:url(blank.gif); 

blank.gif是1x1透明GIF和錯誤是固定的!

它看起來像jQuery UI球員are aware of the issue,它固定在1.9及以上。