检测phonegap中iframe内的注销事件

时间:2016-03-11 08:36:59

标签: cordova iframe

有关如何做到这一点的任何想法?基本上,我有一个在嵌入iframe的网站中运行的会话,即使会话和网站运行得很好,我还需要一种方法来检测用户在app(外部)中注销(在iframe内)。有关如何做到这一点的任何想法?我可以控制函数返回的值,所以我可以像这个服务器端那样做

return/echo "user_logged_out";

但我必须找到一种方法将其发送到应用程序,而不仅仅是退出iframe内的用户,如果这有任何意义。怎么想?

1 个答案:

答案 0 :(得分:0)

所以你可以认为真正的应用程序和iframe像父母和孩子一样。在这里,我们可以将iframe称为孩子。你应该做的是,孩子和父母之间的沟通。因此,如果用户从iframe注销,您应该向其父级发送消息,然后您应该从父级获取消息以继续。以下是此操作的一种方法:

iframe方:
1 - parent.postMessage('This message coming from iframe, user loged out', "*"); //这里 parent 是全局javascript对象,function的第一个参数是你的消息,第二个是将接收消息的目标url。目前它是通用的(*)。

<强> 2 - (可选) window.addEventListener("message", receiveMessage, false); //如果iframe中有任何收到的消息,则调用receiveMessage()函数。

3 - (可选)如果向iframe收到任何消息,将调用以下函数。在你的情况下,它不会被调用。您想收到来自父方的消息。在这里,您还可以在邮件中发送数据。

function receiveMessage(event) {
        var receivedData = JSON.parse(event.data);
        console.log('received');
    }

家长方:
它也在以相同的逻辑工作。

当父收到消息时,

1 - 将调用receiveMessage()函数。

                window.addEventListener("message", receiveMessage, false);

<强> 2 -

function receiveMessage(event) {
                console.log(event.data);
            }

3 - (可选)以下是从父级发送邮件到iframe的方式。假设你的iframe有id'#iframe':

                var child = document.getElementById('iframe').contentWindow;
                child.postMessage('Message parent to iframe', '*');

最后注意事项:如果你想传递其他类型的数据,比如对象或数组,请使用JSON.stringify()并发送它,在收到消息后使用JSON.parse()来获取你的真实数据。