2013-04-09 28 views
1

看文檔中的postMessage示例:http://developer.chrome.com/trunk/apps/app_external.html#postMessage是否有一個簡單的postMessage使用沙箱頁面的簡單示例?

似乎表明沙箱頁面會同步註冊事件處理程序,否則應該如何獲取postMessage事件?

我想這裏的錯誤沿着這條雲:https://code.google.com/p/chromium/issues/detail?id=154662 看來你不能使用窗口回調到的postMessage發送到沙盒iframe中,但存在這樣的情況您使用包含一個iframe頁面的解決方法的提到沙盒頁面。這裏唯一的問題是,事件發生的時間和地點如何/何時還不清楚......

這個沙盒東西看起來很複雜,它周圍的文檔有誤導性和/或過時。這個例子甚至有意義嗎?沒有先獲取消息並記錄event.source,是否可以向後臺頁面發送消息?

如何在後臺頁面中註冊事件偵聽器以響應從沙盒頁面發回的郵件?這裏有很多問題,我擁有的只是一個破碎的例子。

+0

經過一番玩,這似乎工作: 'setTimeout(function(){ win.contentWindow.frames [0] .postMessage('我剛剛打電話......說...嗨。','' *'); },100);' 但是看起來很瘋狂,需要用超時來做這件事。 – ddumont 2013-04-09 21:20:20

+0

我無法回答你的問題,因爲它的措辭。但你是對的:這個例子有點太過分了。這在技術上是正確的,因爲它確實「將消息發佈到它打開的沙盒頁面。」這不是一個非常有用的例子,因爲它不可靠。請注意WHATWG規範的建議:「要將消息發送到新創建的子iframe的窗口,建議作者讓子文檔向其父發佈消息,宣佈他們準備接收消息,並讓父母等待在開始發佈消息之前爲此消息。「 – sowbug 2013-04-11 02:25:03

+0

我一直在通過它。不幸的是,答案並不簡潔,但它能夠完成工作,而且確實按照我猜測他們打算的方式工作。我會在今天晚些時候回答我自己的問題。 – ddumont 2013-04-11 12:28:34

回答

1

github上的chrome-app-samples示例更多地是您要找的。下面是添加事件監聽器響應事件的沙盒頁:https://github.com/GoogleChrome/chrome-app-samples/blob/master/sandbox/sandbox.html

而這裏的使用postMessage背景頁:https://github.com/GoogleChrome/chrome-app-samples/blob/master/sandbox/mainpage.js

GitHub的例子是比文檔上的那些內容更加豐富。 https://github.com/GoogleChrome/chrome-app-samples有幾乎所有你可能需要做的例子。