2011-09-16 2 views
8

私は、テキストエリアと組み込みコンテンツ編集可能iframe(rte)を含むいくつかのhtml要素を持つWebページを手に入れました。私はメインページにdraggestureイベントをキャッチし、今ドラッグする:データの置換

jQuery(document).bind('draggesture', function(event){     
    event.originalEvent.dataTransfer.setData('text/html', 'my_data'); 
}); 

text/htmlのデータを設定するために管理し、このコードを使用して

、メインページ「my_data」にテキストエリアにドロップするときは、ドロップされます。 contenteditable iframeをドロップすると、 'my_data'も削除されます。

1.文書が働くのiframeにハンドラのこの種の結合:

は、しかし、私は理解していないことをここに3つの問題を得ました。上記のコードにイベントデータのアナログを設定しましたが、動作しません。 iframeの内側またはメインページのテキストエリアにドラッグすると、 'my_data'が挿入されず、元の選択されたコンテンツが挿入されます。 'my_data'を設定するにはどうすればよいですか?

2.私は、iframeのメインページにドロップイベントを使用してデータを設定/変更してみました:

jQuery(ed.getDoc()).bind('drop', function(event){ 
    event.originalEvent.dataTransfer.setData('text/html', 'my_data'); 
}); 

しかし、私は両方の文書(メインページとiframeのjavascriptのエラーが出ます): "この文書では修正が許可されていません"。 なぜこのエラーが発生しますか?このための回避策はありますか? pimvdbのように見えます。

メインページから<p>some text</p><hr><p>some text</p>を選択し、iは上から最初のコード例を使用して(Draggestureに)「my_data」を設定する際のcontentEditable IFRAME何も挿入されませんにこれをドラッグ。テキストエリアにドラッグすると機能します。 ここで何が間違っているのか、誰か知っていますか?(問題はクロムを使用して発生しません!)

EDIT:ここは遊んで、問題を理解するためのjsFiddleのデモです:

http://jsfiddle.net/R2rHn/5/

+1

あなたはjsFiddleデモを作ることはできますか? –

+0

私の編集後の記事を見る - jsFiddleのデモを追加 – Thariama

答えて

2

あなたはdraggestureが、dragstart作品を使用しています。

第2に、dropのデータをdataTransferに設定することは意味がありません。なぜなら、ドラッグの「パッケージ」はすでに到着しているからです。それはドロップ後に破壊されているので、なぜあなたはその時点でそれを変更したいのですか?

私はあなたのフィドルを掃除して、それを解決できるように起こっていたことを真っ直ぐにしました。これが結果です。それはクロムで動作するようです。

http://jsfiddle.net/R2rHn/7/

tinyMCE.init({ 
    mode : "exact", 
    elements : "content", 
    skin : "o2k7", 
    skin_variant : "silver", 

    setup : function(ed) { 
    ed.onInit.add(function(ed, evt) { 
     var iframe = ed.getDoc(); 

     jQuery(iframe).bind('dragstart', function(event){ 
     event.originalEvent 
       .dataTransfer 
       .setData('text/plain', 'modified_content_from_iframe'); 
     }); 
    }); 
    }, 

}); 

jQuery(document).bind('dragstart', function(event){   event.originalEvent 
     .dataTransfer 
     .setData('text/html', 'my_data_html'); 

    event.originalEvent 
     .dataTransfer 
     .setData('text/plain', 'my_data_plain'); 
}); 
+0

+1クロームでうまく動作しますが、Firefoxではうまく動作しません。 Firefoxを使用しているため、私はFirefoxのソリューションが必要です。 FF5とFF6を使用して、コンテンツ編集可能なiframeからテキストエリアにドラッグすると、不幸にもドラッグデータが変更されます。 FFを使用すると、動作は変わりません。 – Thariama

+0

@Thariama:Firefoxについてはわかりません。おそらく、Firefoxは完全なサポートと特定のバグを持っていません。ドラッグアンドドロップはHTML5なので、まだ完全には機能していない可能性があります。 – pimvdb

+0

その可能性があります、私は機能する回避策で生きることができました – Thariama

関連する問題