2011-03-06 51 views
3

我有这个脚本的Gmail。它运行在iframe的canvas_frame内。
我想使用parent.document来获取父文档的句柄。但在Chrome中告诉我,它是未定义的。在Firefox中可以正常工作,但在Chrome上会出现问题。
那么,我如何在Chrome中从iframe中获取父文档的句柄。
Chrome的版本:11.0.686.3铬iframe父母未定义

这里是一个的失败代码:

function init() { 
    try { 
     if(parent == null) { 
      console.log(typeof parent); 
      window.setTimeout(init, 200); 
      return; 
     } 
     // SOME MORE STUFF 
    } catch(e) { console.log(e) } 
} 

这部分只是在日志窗口输出undefined不休。
这是一个测试脚本,可以产生相同的结果。它不断地输出undefinedcQ

// ==UserScript== 
// @name   TEST SCRIPT FOR CHROME 
// @version  1.0 
// @namespace  1nfected 
// @description TEST 
// @include  http://mail.google.com/* 
// @include  https://mail.google.com/* 
// ==/UserScript== 

(function() { 
if(document.documentElement.className != 'cQ') { 
    console.log('not our frame'); 
    return; 
} 
function init() { 
    if(window.parent == null) { 
     console.log(typeof window.parent); 
     console.log(document.documentElement.className); 
     window.setTimeout(init, 1000); 
     return; 
    } 
    console.log('Found the parent'); 
} 
init(); 
})(); 

回答

0

我终于意识到,在谷歌Chrome,userscripts被剥夺window.parent访问。
只有当我将脚本注入网页时,它才会起作用。

+0

那,使用内容脚本会更好,因为你得到了完全控制(有点)。 – 2011-03-16 00:07:55

+0

我做了一点阅读最终也发现,在code.google.com对此提起了问题。我认为内容脚本也不会有任何好处。 – 1nfected 2011-03-21 14:55:01

4

UserScripts在Chrome是有限的,尤其是当它涉及到I帧。

为什么你不能以其他方式做到这一点?例如:

var frame = document.getElementById('canvas_frame'); 
if (frame) { 
    var dom = frame.contentDocument; 
} 

这里更好的答案是Chrome Extensions,你将有一个Content Script,而不是用户脚本更多的控制。

+0

这就是我一直这样做到现在为止。但是几天后,这种方法一直在起作用。 dom(frame.contentDocument)对象不会返回任何东西。当我切换到我目前的方法后,它开始再次工作100%,但仅在Firefox中不幸。尚未测试Opera。 – 1nfected 2011-03-06 19:18:59

+0

如果出现问题,请提交一个错误报告并放置一个小型缩减测试用例。由于我铬贡献,我将它类选,并将其分配给适当的开发者。 – 2011-03-16 00:09:23

+0

我不知道,但是这可能会在这方面提出的问题:为什么我说在Chrome用户脚本被限制http://code.google.com/p/chromium/issues/detail?id=20773 – 1nfected 2011-03-21 14:58:11