0

jQueryを使用してjavascriptファイルをiframeにロードしようとしていますが、そこにあるDOMを調べているようですが、親にあるかのように動作します。コードの一部を次に示します。

somejsfile.js:

function createDraggable(draggableId){
    if (jQuery.isFunction(jQuery.fn.draggable)) {
        jQuery('#'+draggableId,fPage).draggable({
            containment: '#contentArea',
            iframeFix: true,
            start: function() {
                dragStart();
            },
            drag: function() {
                dragHappening(draggableId);
            },
            stop: function() {
                dragEnd(draggableId);
            }
        });
    } else {
        setTimeout(function(){createDraggable(draggableId)},100);
    }
}
var fPage = $("#contentFrame").contents();
createDraggable(someElementId);

親.js:

function loadJS(filepath,w) {
    if (!$("script[src*='"+filepath+"']",w).length) {   
        $("head",w).append('<script type="text/javascript" src="'+filepath+'"></script>');
    }
}
var fPage = $("#contentFrame").contents();
loadJS('jquery.min.js',fPage);
loadJS('jquery.ui.min.js',fPage);
loadJS('jquery.ui.draggable.min.js',fPage);
loadJS('somejsfile.js',fPage);

現在、somejsfile.js ではjQuery('#'+draggableId,fPage).draggable({機能しますが、jQuery('#'+draggableId).draggable({機能しないため、実際には iframe に読み込まれていないと思われます。firebug を見ると、iframe の先頭にこれらのスクリプトが表示されますが、メイン ウィンドウの jQuery にドラッグ可能な関数が表示されますが、そこにはロードしていません。

メインウィンドウに表示したくない理由は、選択するとオブジェクトから飛び出し、クリックすると再度クリックするまでドラッグするために選択されたままになるため、正しく機能しないためです。

4

2 に答える 2

0

これは機能します:

$("#contentFrame").load(function(){
  function loadJS(filepath, iframe) {
    console.log('loading: ', filepath);
    var script = iframe.get(0).contentWindow.document.createElement("script");
        script.type = "text/javascript";
        script.src = filepath;
    iframe.get(0).contentWindow.document.head.appendChild(script);
  }
  var fPage = $("#contentFrame");  
  loadJS('jquery.min.js', fPage);
  loadJS('jquery-ui.min.js', fPage);
  loadJS('jquery.ui.draggable.min.js', fPage);
  loadJS('somejsfile.js', fPage);  
});

こちらもご覧ください:動的に作成された <iframe> に <script> を追加すると、親ページでスクリプトが実行されるように見えるのはなぜですか?

于 2013-07-18T20:27:04.123 に答える
0

この質問は私が求めていたもののようです。loadJS 関数を次のように変更しました。

function loadJS(filepath,w) {
   var script = page.document.createElement("script");
   script.type = "text/javascript";
   script.src = filepath;
   page.document.head.appendChild(script);
}

渡される w 変数は、次のタイプの形式である必要があります。

frames['contentFrame'].contentWindow
于 2013-07-18T20:00:51.373 に答える