javascript – “DataCloneError:无法克隆对象.”在FireFox 34中

前端之家收集整理的这篇文章主要介绍了javascript – “DataCloneError:无法克隆对象.”在FireFox 34中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用给定的函数发布消息,但收到错误“DataCloneError:无法克隆该对象”. at line“target [‘postMessage’](message,target_url.replace(/([^:]:// [^ /]).* /,’$1′));”在FireFox-34中,相同的代码在Chrome和旧版FireFox上运行良好.
  1. var storage = function() {
  2. return {
  3. postMessage : function(message,target_url,target) {
  4. if (!target_url) {
  5. return;
  6. }
  7. var target = target || parent; // default to parent
  8. if (target['postMessage']) {
  9. // the browser supports window.postMessage,so call it with a targetOrigin
  10. // set appropriately,based on the target_url parameter.
  11. target['postMessage'](message,target_url.replace( /([^:]+:\/\/[^\/]+).*/,'$1'));
  12. }
  13. }
  14. }
  15. }();

解决方法

postMessage在Firefox中使用 structured clone algorithm发送消息,因此在发送之前需要调整某些内容.

在你的例子中,消息包含的内容并不明显,但是围绕结构化克隆的一种黑客方式就是强制一点.通过postMessage发送URL将引发错误

  1. someWindow.postMessage(window.location,'*');
  2. // ERROR

但你可以这样做来解决它:

  1. var windowLocation = '' + window.location;
  2. someWindow.postMessage(windowLocation,'*');
  3. // WORKS

有更好的方法来处理这个问题,但是对于你提供的内容,至少应该允许一致的行为.

猜你在找的JavaScript相关文章