【问题标题】:Clear the Omnibox from Chrome extension code从 Chrome 扩展代码中清除多功能框
【发布时间】:2015-09-02 10:12:41
【问题描述】:

我已经编写了一个 Chrome 扩展来替换新标签 如果用户想要的话。它的工作原理是拦截 tabs.onUpdated 并将 chrome://newtab/ 从扩展程序重定向到另一个页面,如 in this answer 所述。

问题在于该页面的地址栏在扩展程序中保留了 HTML 的(丑陋的)URL,例如chrome-extension://hibkhcnpkakjniplpfblaoikiggkopka/html/newtabl.html。那个 URL 怎么能被空字符串替换呢?

我已经尝试过 history.replaceState,但最好的办法是更改路径中的文件 (newtab.html)。使用 http:// URL 会使扩展程序崩溃:

history.replaceState({}, 'iDoRecall practice', 'http://type-anything-here.com');

有什么聪明的方法可以清除多功能框吗?

【问题讨论】:

    标签: javascript google-chrome google-chrome-extension omnibox


    【解决方案1】:

    简单地说,History API 只能更改 URL 的路径部分,而不是来源(协议://主机:端口),这是防止网站欺诈的明显原因:

    如果生成的绝对 URL 的来源与入口设置对象指定的负责文档的来源不同,并且在上一步中比较的两个解析 URL 的路径或查询组件不同,则抛出SecurityError 异常并中止这些步骤。 (这可以防止沙盒内容欺骗同一来源的其他页面。)

    多功能框仅在一种情况下可能为空:在新标签页上,即您必须替换 chrome_url_overrides 中 manifest.json 中的新标签。

    【讨论】:

    • 覆盖新标签的问题是用户可能不希望这样做(例如,他们已经使用了新的标签替换扩展,因为它们越来越受欢迎),并且没有 API 可以选择性地覆盖新标签。
    • 我会使用一个覆盖页面,但内容会根据用户选项而有所不同。
    • @wOxxOm:使用相同的新选项卡覆盖页面但内容不同的问题在于,您不可能知道用户之前的新选项卡替换是什么。这是not even recommended to try and emulate Chrome's default "top visited sites" layout
    • This answer 在用户选择退出时通过重定向到 chrome-search://local-ntp/local-ntp.html 概述了一种“hacky”替代品。
    猜你喜欢
    • 1970-01-01
    • 2015-02-13
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2023-03-13
    • 2022-07-12
    相关资源
    最近更新 更多