【发布时间】:2018-02-26 10:09:10
【问题描述】:
Google Chrome 扩展程序是否有一种简洁的方法可以将非本地网页设置为新标签页,同时保持多功能框清除或突出显示?
扩展清单中的 chrome_url_overrides.newtab option 只允许本地 HTML 页面。
现在,我看到两个选项:
- iframe 本地扩展页面中的网页。但是,许多网站在 iframe 后无法正常运行。
- 将本地新标签页重定向到网页。但是,这并不能可靠地突出显示多功能框,因此用户必须在键入前手动将焦点设置到多功能框,这会导致用户体验不佳。
理想的解决方案是将网页保持在新标签页的顶部框架,并且多功能框将被清除或突出显示。
附加信息:
- 对于 Chrome 扩展程序 New Tab Redirect,有一个关于此主题 here 的持续未解决的线程。
- 使用
chrome.tabs.update重定向新标签页历来突出显示URL。但是,这似乎没有记录且不可靠。突出显示的broke in Chrome 34 似乎是broken now in Chrome 61(我刚刚报告的一个错误)。
【问题讨论】:
-
您可以通过 stripping X-Frame-Options 标头强制网站在 iframe 中工作 + 将内容脚本注入 iframe,通过 Object.defineProperties 欺骗
window.parent和window.top以指向window -
我不认为
window修改会起作用。内容脚本不能“使用网页或其他内容脚本定义的变量或函数”developer.chrome.com/extensions/content_scripts -
当然,但是
window.top和window.parent是只读的。如果您拥有正在构建 iframe 的网站,则此解决方案是可以的(实际上我目前正在为扩展做此操作),但它不容易推广。 -
您确定
Object.defineProperty有效吗?top属性是不可配置的,您可以在开发控制台中验证:Object.getOwnPropertyDescriptor(window, 'top')。 w3 规范具有“不可伪造”的属性:w3.org/TR/html5/browsers.html#the-window-object 如果您尝试Object.defineProperty(window, 'top', {get: function() { return 'foo' }}),您将看到:Cannot redefine property: top。