フロントエンドiframeサブページと親ページの通信の問題
4228 ワード
index.html、iframe.htmlですが、htmlファイルはサーバの下に置いてアクセスする必要があります.fileプロトコルでは有効になりません.
1.一般的な要件:親ページ要素を取得するには、サブページのみが必要です.
window.parentまたはwindowを参照してください.iframeの使い方は、比較的簡単です
2.覇気需要、dragドラッグifame(旧式のmousedown+mousemove+mouseupシミュレーションのdragイベントは実現できない)
ここではHTML 5のdrag and drop APIを利用して
1.一般的な要件:親ページ要素を取得するには、サブページのみが必要です.
window.parentまたはwindowを参照してください.iframeの使い方は、比較的簡単です
2.覇気需要、dragドラッグifame(旧式のmousedown+mousemove+mouseupシミュレーションのdragイベントは実現できない)
ここではHTML 5のdrag and drop APIを利用して
index.html
<script type="text/javascript" src="/pfl/vendor/jquery.min.js"/>
<style>
.trash{
padding: 10px;
height: 100px;
background: #BCDAFA;
border: 2px solid #8C96FF;
font-size: 60px;
line-height: 100px;
}
.trash.hover{
background: #FFFFAB;
border: 2px dashed red;
color: red;
}
#iframe{width:100%;height:450px;}
</style>
<div id="trash" class="trash"> </div>
<iframe src="/pfl/mysql/dragson" frameborder="0" id="iframe"/>
<script type="text/javascript">
$(function(){
iframeWindow = $('#iframe')[0].contentWindow; // window
$("#trash").on("dragenter",function(ev){
if(iframeWindow.isCrossIFrameDragging) {
$(ev.target).addClass("hover").text(" ");
}
})
.on('dragleave', function(ev) {
if(iframeWindow.isCrossIFrameDragging) {
$(ev.target).removeClass('hover').text(" ");
}
})
.on("dragover",function(ev){
if(iframeWindow.isCrossIFrameDragging) {
ev.preventDefault();
ev.originalEvent.dataTransfer.dropEffect = 'move';
}
})
.on("drop",function(ev){
var df = ev.originalEvent.dataTransfer;
var data = df.getData("Text");
//dataTransfer.getData(format): DataTransfer format 。 format ,data 。
if(iframeWindow.isCrossIFrameDragging) {
var id = data.match(/^cross_iframe_drag_([0-9]+)$/)[1];
// '/ ,^ ,() ,+ '
$(ev.target).removeClass('hover').text(" ["+id+"], , !");
iframeWindow.removeDraggingItem();
}
});
});
</script>
</code></pre>
<pre><code>iframe.html
<meta charset="UTF-8"/>
<title>iframe
iframe ,
- 1
- 2
- 3
- 4
- 5
- 6
$(function(){
$("#items").find("li").on("dragstart",function(ev){//"dragstart" 。
var dt = ev.originalEvent.dataTransfer;// dataTransfer
dt.setData('Text','cross_iframe_drag_'+$(this).text());
//dataTransfer setData , 'cross_iframe_drag_ Hue'
dt.effectAllowed = 'move';// ,move: 。
window.isCrossIFrameDragging = true;
window.draggingItem = this;
}).on("dragend",function(ev){
window.isCrossIFrameDragging = false;
});
window.removeDraggingItem = function(){
$(window.draggingItem).animate({height:0,opacity:0},1000,function(){
$(this).remove();
});
window.draggingItem = null;
};
});