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에 통합하여 폴링이 필요하지 않습니다. 대신로드 jQuery를하고 jQueryUI iframe을 내부와 부모와 자식 모두 jQueryUI 상호 작용을 평가
감사합니다. 이것은 나에게 충분히 깨끗한 해결 방법 같다. 이 문제를 수정 한 이유에 대한 설명이나 링크를 추가 할 수 있습니까? – RARay
@RARay 제 업데이트를 참조하십시오. –
"이 방법은 충분히 깨끗한 해결 방법입니다." 정말? 이것은 곧장 폴링입니다. 그것은 생산을위한 끔찍한 해결책입니다. 이보다 더 좋은 방법이 있습니다. – kamelkev