2011-07-25 50 views
1

我正在構建一項服務,允許用戶將JavaScript代碼放到他們的網站上。 JavaScript代碼基於jQuery。基於jQuery的嵌入式JavaScript

我的問題是如何做到這一點安全和優化,因爲我不想打破某些用戶的網站。

我找到目前爲止(如果你認爲我需要面對其他問題,您可以更新)的事情:

  1. 什麼,當用戶已經有jQuery的加載自己的頁面上會發生什麼?我應該加載我的jQuery庫使用不同的命名空間,或者我應該使用他的jQuery庫。
  2. 萬一我可以使用他的jquery庫,我想我需要檢查是否版本corespond,但又是安全的?
  3. 如果我想使用他的jquery庫,我該如何檢查他是否有jquery加載,並且他是否有合適的版本
  4. 這與3有關。如果他更改了他的jQuery庫與我認爲會出現的圖書館相對應,導致一個不好的結果。

尋找答案。 謝謝

回答

3
  1. 不要依賴頁面的jQuery或嘗試使用它。這隻會變成支持噩夢。你甚至不能確定一個版本是否準確,因爲目標頁面可以改變它的jQuery版本。

  2. 最好的方法是讓您的代碼創建並加載iFrame。這使您可以完全控制iFrame的jQuery,CSS等,大大減少了衝突的可能性。

  3. 如果出於某種原因iFrame方法不可行,請使用noConflict來儘量減少jQuery版本衝突的可能性。
    事情是這樣的:

    <script type="text/javascript"> 
        if ($ || jQuery) { 
         var PagesLibrary = $; 
         var PagesjQuery  = jQuery; 
    </script> 
    
    <!-- load your jQuery --> 
    <script type="text/javascript" src="http://example.com/jquery-1.6.2.js"></script> 
    <script type="text/javascript"> 
        var my_jQuery = $.noConflict (true); 
        if (PagesjQuery) { 
         $    = PagesLibrary; 
         jQuery   = PagesjQuery; 
        } 
    </script> 
    

    代替$('#selector').function();然後,
    用途:my_jQuery('#selector').function();

2

沒有實際的上下文什麼你注入的代碼呢,這很難說。如果您正在編寫一般功能,您可能只需將其實現爲jQuery插件,指定您的目標版本,然後將其留給用戶以決定如何包含它等。

但是,這聽起來更像是你正在寫某種服務。在這種情況下,我推薦以下課程:

將所有依賴的代碼(jQuery,其他庫,代碼等)放在一個匿名函數包裝中,然後讓人們只需插入一個腳本標記指向你的js文件。這最有可能爲您提供可靠的結果。如果您需要特殊信息(如ID),請在注入代碼將這些值設置爲全局變量之前添加代碼片段,或者在注入之後運行額外的代碼以調用您的數據函數。看看Google Analytics如何完成此操作以供參考。無論哪種方式,您都需要影響全局範圍。

我知道這可能不是你想聽到的。你總是可以創建一個精心製作的jQuery檢測和注入方案,但是你會碰到你提到的問題(如版本衝突等)。安全的方法是將您需要的所有代碼與您自己的代碼結合起來,並將它們全部作爲一個文件進行提供,這些文件只進行內部參考。

希望這會有所幫助!