動態添加jQuery和jQuery用戶界面的IFRAME(demo):
$('iframe')
.load(function() {
var win = this.contentWindow,
doc = win.document,
body = doc.body,
jQueryLoaded = false,
jQuery;
function loadJQueryUI() {
body.removeChild(jQuery);
jQuery = null;
win.jQuery.ajax({
url: 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js',
dataType: 'script',
cache: true,
success: function() {
win.jQuery('.sortable').sortable({ cursor: 'move' });
}
});
}
jQuery = doc.createElement('script');
// based on https://gist.github.com/getify/603980
jQuery.onload = jQuery.onreadystatechange = function() {
if ((jQuery.readyState && jQuery.readyState !== 'complete' && jQuery.readyState !== 'loaded') || jQueryLoaded) {
return false;
}
jQuery.onload = jQuery.onreadystatechange = null;
jQueryLoaded = true;
loadJQueryUI();
};
jQuery.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js';
body.appendChild(jQuery);
})
.prop('src', 'iframe-test.html');
更新:Andrew Ingram is correct是jQuery UI的擁有和使用,以window
和document
引用的頁面,jQuery UI的是哪個加載。通過將jQuery/jQuery UI加載到iframe中,它具有正確的引用(對於iframe而不是外部文檔)並按預期工作。
更新2:原代碼片斷產生了微妙的問題:動態腳本標記的執行順序無法得到保證。我已經更新了它,以便在jQuery準備好之後加載jQuery UI。
我也將getify的代碼合併到load LABjs dynamically,所以不需要輪詢。
謝謝!這對我來說似乎是一個乾淨的解決方法。你可以添加一個解釋或者一個鏈接,說明爲什麼這個解決了這個問題? – RARay 2012-06-28 14:11:04
@RARay請參閱我的更新。 – 2012-06-28 14:34:39
「這對我來說似乎是一個乾淨的解決方法。」真?這是直接投票。這是一個糟糕的生產解決方案。有*有*是比這更好的方式。 – kamelkev 2013-07-25 00:11:32