Modern browsers which support the postMessage API have increased security which blocks this kind of intra-frame communication. On browsers that don't have this support, the technique you're using should be fine. The only exception to this is Safari 3.2, does not support the HTML 5 postMessage API and will not allow you to set parent.location in certain circumstances.
The other gotcha is that while IE8 has implemented the postMessage API, it has (somewhat predictably) done it differently from all the other browsers (FF3+, Chrome, Safari 4+ and Opera 9.64+). With IE8, postMessage communication between a popup and it's opener is not allowed, meaning you need to use an extra iframe for IE8 that is not required for any other browser.
The end result is that, to implement communication between a page and popup window on a remote domain, you need one branch for decent modern browsers, one for older browsers, and a separate one each for IE8, IE7 and IE6. Thanks Microsoft...
祝你好運 :)