2013-12-17 54 views
1

我正在寫一個Windows 8 JavaScript商店應用程序(使用科爾多瓦)。當我在Windows 8中使用jQuery時,爲什麼我必須修改jQuery庫以使用以下幾個函數?Windows 8商店應用程序和jQuery - MSApp.execUnsafeLocalFunction

MSApp.execUnsafeLocalFunction 

最好我不想這樣做,因爲這是一個輕微的不便,每當jQuery Mobile的新版本發佈(其中,幸運的是,是不是經常) - 有項目禁用此設置?

我正在使用jQuery v1.9.1和jQuery Mobile v1.3.2(這是最新的穩定版本)。我讀這是固定的jQuery 2.x - 有人可以確認這是否屬實?

如果是這樣,在我的移動應用程序項目中使用jQuery 2.x是不安全的? jQuery Mobile v1.3.2所依賴的jQuery v1.9.1中是否有函數,這些函數在jQuery v2.0中不可用?

回答

6

對於某些函數,您需要使用MSApp.execUnsafeLocalFunction,因爲jQuery爲Microsoft以不安全的方式添加了HTML。一些HTML元素和屬性被認爲是不安全的,當jQuery不安全地將它們添加到DOM時,應用程序崩潰,例如使用append或innerHTML。不安全的HTML元素和屬性可以在here找到。

這個問題是因爲我知道不在jQuery 2.x中修復。我仍然在努力使異步頁面更改與不安全的關鍵字一起工作。當我有解決方法或修復時,我會通知您。

更新:MSOpenTech創建了一個JavaScript動態內容填充來解決這個問題。看看我的blog post或他們的Github page

+0

謝謝!很好的答案 - 這很煩人。我希望jQuery中的人能儘快修復它。如果/當您找到某些東西時,請告知我 - 非常感謝! – keldar

+1

查看我的最新[blogpost](http://dibranmulder.blogspot.nl/2014/03/combo-breaker-cordova-jqm-windows8.html),瞭解JQM與Windows 8結合使用的一些解決方法和怪癖。 – Dibran

+1

我更新了有關MSOpenTech創建的「JavaScript動態內容填充」的一些信息。 – Dibran

4

調用此函數在deviceready事件和警報和jQuery HTML方法就可以在所有

function WinAppHack() { 

    if (MSApp && MSApp.execUnsafeLocalFunction) { 

     // override jquery html method 
     var old_html = $.fn.html; 
     $.fn.html = function() { 
      var args = arguments; 
      var This = this; 
      var result = null; 
      //$(this).css('font-size', 24) 
      MSApp.execUnsafeLocalFunction(function() { 
       result = old_html.apply(This, args); 
      }); 
      return result; 
     }; 

     // override alert method 
     alert = function (msg, Closed) { 
      if (!Closed) 
       Closed = function() { }; 
      navigator.notification.alert(
      msg, 
      Closed,   
      'Message',  
      'OK'     
      ); 
     }; 
    } 
} 
+1

哈哈,輝煌! – foreyez

+0

append(),prepend(),appendTo(),prependTo()方法呢? html()不是操縱DOM的唯一方法,對不起。無論如何,我投你的帖子,因爲這個問題是讓我生氣,我即將放棄我的WP8應用程序,並專注於Android單獨。 – andreszs

相關問題