【发布时间】:2017-03-09 17:59:16
【问题描述】:
我有一个页面addin.html。它可以通过
editor(不一定在同一个域中)
popup = window.open("https://localhost:3000/#/posts/editor/", "popup")
那么,两个页面每个内部都有一个监听器,可以通过
相互发送数据// listen:
function receiveMessage(event) {
document.getElementById("display").innerHTML = JSON.stringify(event.data);
}
window.addEventListener("message", receiveMessage, false);
// send:
function sendMessage() {
popup.postMessage("data", popup.location.href);
}
editor 由ui-router 实现。最初,它在加载页面之前解析init:
.state('editor', {
controller: 'EditorCtrl',
resolve: { init: [ ... ] },
...
};
app.controller('EditorCtrl', ['$scope', 'init', function ($scope, init) {
...
}]
我现在要实现的是,当addin.html弹出editor时,它会向editor发送一些数据,而init需要在加载页面之前解析这些数据。 editor 在接收到来自addin.html 的数据之前可能会挂起。
有谁知道如何修改接收者和发送者(以及其他东西)来完成这个?
【问题讨论】:
-
你不能通过 URL 参数传递这个初始数据吗?
-
可能有很多数据,我如何将它们嵌入到
window.open? -
选择不多。如果数据太大,请使用服务器端会话来存储和检索数据。或者使用 POST 发送数据。
-
@estus ,我不明白你的建议......不像
editor,addin.html没有服务器,也不是用angularjs构建的。 -
如果 addin.html 很重要,你为什么不说什么?该页面不需要它自己的服务器来在那里发送东西。它只需要 一些 服务器。为什么它不是用 Angular 构建的呢?它可以使用 JS,从而做我建议的事情。
标签: javascript asynchronous angular-ui-router cross-domain postmessage