admin管理员组文章数量:1335623
I have button which opens an iFrame (which reside in domain say 'xyz') the iFrame loads the page which resides in another domain (say 'lmn')
$("#templateSelectionFrame").get(0).contentWindow.location.href = url;
url is from another domain (I municate in different domain with Jquery 'POSTMESSAGE')
when user clicks cancel button from iFrame i need to close the iFrame but before that it is necessary to show the page leaving message (ie. stay on page / leave page - this is alreday called on window.onbeforeunload
).
var warnNavigateAway = true;
window.onbeforeunload = confirmBrowseAway;
// Called then user leave window without saving content.
function confirmBrowseAway() {
if (warnNavigateAway) {
return "If you leave this page, your work will be lost ...";
}
}
function documentSaved() {
warnNavigateAway = false;
}
function documentDirty() {
warnNavigateAway = true;
}
<div id="bottomBar">
<button class="cancelBtn" onclick="GoBack()">Cancel</button>
</div>
how do i call the same page leaving message so that i can close the iFrame when user clicks leave page message.
function GoBack()
{
var operationType = '<%: (Model.OperationType)%>';
if (operationType == "Create")
{
window.history.back();
}
else {
$.postMessage(
'closeIFrame',
parentUrl,
parent
);
}
}
(navigation: cancel button -> page leave message -> if(stay on page then 'nothing to do') if(leave page then ) -> close the iFrame)
I have button which opens an iFrame (which reside in domain say 'xyz') the iFrame loads the page which resides in another domain (say 'lmn')
$("#templateSelectionFrame").get(0).contentWindow.location.href = url;
url is from another domain (I municate in different domain with Jquery 'POSTMESSAGE')
when user clicks cancel button from iFrame i need to close the iFrame but before that it is necessary to show the page leaving message (ie. stay on page / leave page - this is alreday called on window.onbeforeunload
).
var warnNavigateAway = true;
window.onbeforeunload = confirmBrowseAway;
// Called then user leave window without saving content.
function confirmBrowseAway() {
if (warnNavigateAway) {
return "If you leave this page, your work will be lost ...";
}
}
function documentSaved() {
warnNavigateAway = false;
}
function documentDirty() {
warnNavigateAway = true;
}
<div id="bottomBar">
<button class="cancelBtn" onclick="GoBack()">Cancel</button>
</div>
how do i call the same page leaving message so that i can close the iFrame when user clicks leave page message.
function GoBack()
{
var operationType = '<%: (Model.OperationType)%>';
if (operationType == "Create")
{
window.history.back();
}
else {
$.postMessage(
'closeIFrame',
parentUrl,
parent
);
}
}
(navigation: cancel button -> page leave message -> if(stay on page then 'nothing to do') if(leave page then ) -> close the iFrame)
Share Improve this question edited Oct 4, 2012 at 12:50 Pebbl 36.1k6 gold badges64 silver badges65 bronze badges asked Oct 4, 2012 at 11:22 UttamUttam 311 gold badge1 silver badge3 bronze badges1 Answer
Reset to default 2Pure javascript
As it seems you have control of the code in both domains - despite them being on different hosts - you should be able to use the following from within the iframe:
var warnNavigateAway = true;
var confirmBrowseAway = function(){
/// if warn is enabled, then ask the user. otherwise assume "browse away"
var v = (
warnNavigateAway
?
/// use the built-in confirm dialog to notify the user, this will also
/// halt execution - meaning the page close is prevented until an
/// answer is given.
confirm('If you leave this page, your work will be lost ...')
:
true
);
if ( v ) {
/// disable the warn just in case our deleting of the
/// iframe triggers the onunload
warnNavigateAway = false;
}
return v;
}
/// i've kept the use of "onevent" handlers as in your example, but you
/// should use addEventListener and attachEvent in the same way as I have
/// for the second part of the code in the outer frame.
/// apply as a listener in case the user navigates without using the button
window.onbeforeunload = confirmBrowseAway;
/// apply the same method for the onclick of the button
document.getElementById('cancelButton').onclick = function(){
if ( confirmBrowseAway() ) {
window.parent.postMessage('close_iframe', 'http://xyz/');
}
}
and the following in the host frame:
var messageListener = function(e){
if ( e.origin !== "http://lmn/" ) {
return;
}
if ( e.data == 'close_iframe' ) {
/// however you prefer to close your iframe
document.getElementById('myIframe').style.display = 'none';
/// or removal...
document.getElementById('myIframe').parentNode.removeChild(
document.getElementById('myIframe')
);
}
};
if ( window.addEventListener ) {
window.addEventListener("message", messageListener, false);
}
else if( window.attachEvent ) {
window.attachEvent("onmessage", messageListener);
}
(The above code has been manually typed, errors may be possible, it is meant as an illustrative example)
With the above you'll need modify your markup slightly, for the iframe and for the button.
<button id="cancelButton" class="cancelBtn">Cancel</button>
and
<iframe id="myIframe" ... />
jQuery
Because I failed to spot you were using jQuery here is a jQuery version :)
iframe:
var warnNavigateAway = true;
var confirmBrowseAway = function(){
/// if warn is enabled, then ask the user. otherwise assume "browse away"
var v = (
warnNavigateAway
?
/// use the built-in confirm dialog to notify the user, this will also
/// halt execution - meaning the page close is prevented until an
/// answer is given.
confirm('If you leave this page, your work will be lost ...')
:
true
);
if ( v ) {
/// disable the warn just in case our deleting of the
/// iframe triggers the onunload
warnNavigateAway = false;
}
return v;
}
$(window).bind('beforeunload', confirmBrowseAway);
$('.cancelBtn').bind('click', function(){
if ( confirmBrowseAway() ) {
$.postMessage( 'close_iframe', 'http://xyz/' )
}
});
in the host:
$.receiveMessage(
function(e){
if ( e.data == 'close_iframe' ) {
/// however you prefer to close your iframe
$('.myIframe').hide();
/// or removal...
$('.myIframe').remove();
}
},
"http://lmn/"
);
本文标签:
版权声明:本文标题:javascript - how to call window onunload event for iFrame button click where parent page and iFrame resides in different domain 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742391274a2466039.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论