2012-05-09 85 views
2

我有一些由我的Rails應用程序使用的jQuery插件。幾乎所有頁面都使用jQuery.cookies擴展來確定是否應顯示或隱藏特定元素。IE無法加載某些頁面上的jQuery擴展

這個插件最初下的資產/ JavaScript的它自己的文件,並使用加載以下清單:

//= require jquery 
//= require jquery_ujs 
//= require jquery-ui 
//= require_self 
//= require_directory . //there is a subdirectory i'm ignoring, but jquery.cookies isn't in it 

在Internet Explorer,jquery.cookies.js正在所需它除了每個頁面上進行評估兩個,其中cookies對象未被添加到jQuery。這些網頁包含對我的應用程序相同的JavaScript的任何其他頁面:

javascript_include_tag('application') 

受影響的頁面,下面的代碼進行評估時,被扔像「對象不支持此屬性或方法」錯誤關於cookie的方法:

if ($.cookie("showHero") == 'true' || $.cookie("showHero") == null) { 
    $('#hero').css('display', 'block'); 
} else { 
    $('#hero').css('display', 'none'); 
} 

移動jQuery.cookies.js的內容的application.js的頂部,稱$(document).ready()之前似乎可以減輕這種症狀,並允許JavaScript才能正常運行,但恐怕我還沒有解決真正的問題。

這將發生在使用預編譯資產的開發和生產上。

這些頁面都沒有介紹任何對頁面來說獨一無二的javascript,爲什麼jQuery.cookies可能無法在這樣一個狹窄的情況下進行評估?是否有處理多個不同的JavaScript文件的約定我不知道我可能錯過了?

編輯

我把它收回;將jquery.cookies的內容移動到application.js中似乎只在第一次加載頁面時起作用。後續重新加載顯示相同的行爲。完全喪失。

回答

1

事實證明,只有在此頁面上運行FB.init()的條件似乎對用於訪問cookie對象的$符號進行了破壞。

我不完全確定這是爲什麼;它可能是FB使用原型庫或FB對象可能導致jQuery由於某種原因重新初始化的結果。

由封閉$(document).ready()另一個函數內部改變的js文件的內容可以讓兩套運行JavaScript的,雖然叫jQuery.noConflict()並通過jQuery,而不是$工作同樣出色,但需要改變任何js.erb的文件。

//= require jquery 
//= require jquery-ujs 

(function($) { // the $ is explicitly set to jQuery for this scope 
    $(document).ready(function() { 

    // no more complaints that 'cookies is not a method of $' 
    if ($.cookies('showHero') == true) { 
     // do something 
    } 
    }); 
})(jQuery);