のiframe(demo)にjQueryとjQueryのUIを追加します。
$('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');
更新:jQueryのUIが成り立つとjQuery UIだったためにページのwindow
とdocument
への参照を使用していますAndrew Ingram is correctロードされる。 jQuery/jQuery UIをiframeにロードすると、(外部のドキュメントではなくiframeの)正しい参照が得られ、期待どおりに機能します。
アップデート2:元のコードスニペットは、微妙な問題があった:動的なスクリプトタグの実行順序は保証されません。私はそれを更新して、jQueryの準備が整った後にjQuery UIがロードされるようにしました。
また、getifyのコードをload LABjs dynamicallyに組み込んだので、ポーリングは必要ありません。
ありがとう!これは私にとってきれいな解決策のようです。なぜこれで問題が解決されるのか説明やリンクを追加してください。 – RARay
@RARay私のアップデートをご覧ください。 –
"これは私にとってはきれいな解決策のようです。"本当に?これはまっすぐなポーリングです。それは生産のための恐ろしい解決策です。これよりも良い方法があります*。 – kamelkev