自己在写油猴脚本时,遇到需要在网页 A 唤起网页 B 做一些事并返回结果的需求(具体来说是偷懒不处理 api 问题,直接打开百度之类的网页获取搜索结果)
由于网页 A 和 B 不同域,B.document.onload 禁止访问,于是目前的流程是
问题在于第一次监听 ready 事件时,channel 还没有打开,只能通过 window.addEventListener 监听,而这玩意又是无返回值的函数,于是为了在异步主函数中不要跳出去整 callback ,使用的是如下方法
// 唤起 B
// 监听并等待 ready 消息, TODO: 增加 timeout
await new Promise(res=>{
window.addEventListener("message", receiveMessage, false);
async function receiveMessage(event)
{
// 收到 ready 消息
if (event.origin === targetOrigin && event.data === 'openedReady') {
res();
}
}
})
// 建立 messagechannel
只能说,看起来好 jb 怪
这是正确的操作吗……?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.