Chrome 27:新标签页扩展程序无法从Omnibox中窃取焦点

Chr*_*and 7 html javascript google-chrome-extension

使用Chrome 27时,似乎覆盖Chrome的新标签页的扩展程序无法像以前版本的Chrome中那样关注Chrome的多功能框.

是否有新方法将输入框聚焦在新标签页中,或者是否已完全禁用此功能?:(

要测试它,请创建一个包含三个文件的扩展文件夹:

manifest.json:

{
    "name": "Focus Test",
    "version": "0",
    "minimum_chrome_version": "27",
    "chrome_url_overrides": {
        "newtab": "newTab.html"
    },
    "manifest_version": 2
}
Run Code Online (Sandbox Code Playgroud)

2. focus.js:

document.getElementById('foo').focus();
Run Code Online (Sandbox Code Playgroud)

3. newTab.html:

<html>
    <body>
        <input id="foo" type="text" />
        <script type="text/javascript" src="focus.js"></script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

然后,当您加载扩展并打开一个新选项卡时,输入字段不会集中在新选项卡页面上.

我也尝试将该autofocus属性添加到该input字段中,但也没有运气.扩展程序的新标签页无法将注意力从Chrome的Omnibox上移开.

有任何想法吗?这是一个错误还是一个新的"功能"?

Jim*_*ine 9

ManifestV3 更新

这个答案改编自/sf/answers/794381171/
这已经通过 Manifest V2 和 V3 进行了测试。
在 Google Chrome 99.0.4844.51 64 位 (Windows 10) 中测试。

  1. 将 的内容替换focus.js为:
  if (location.search !== "?x") {
    location.search = "?x";
    throw new Error;  // load everything on the next page;
    // stop execution on this page
  }
Run Code Online (Sandbox Code Playgroud)
  1. autofocus属性添加到<input>.
  2. 转到 Chrome 中的“扩展”页面,然后单击Load unpacked按钮。选择您的扩展程序的文件夹。
  3. 打开新标签页。您可能会看到模态对话阅读Change back to Google?。单击Keep it以保留您的自定义新标签页。
内联 Javascript - 仅 Manifest V2

如果您将 Javascript 内联到 HTML 文件中,则需要执行一些额外的步骤:

  1. 将内联 Javascript 添加到 HTML 文件后,打开 DevTools(F12key)并观察控制台中的错误输出。您应该看到的示例输出:
Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem:". 
Either the 'unsafe-inline' keyword, a hash ('sha256-MK0Gypb4mkZTI11eCOtWT+mGYcJNpN5zccvhfeaRb6E='), or a nonce ('nonce-...') is required to enable inline execution.
Run Code Online (Sandbox Code Playgroud)
  1. 选择并复制此哈希。
  2. 添加一行以manifest.json允许 JS 运行,将刚刚复制的哈希值粘贴到单引号之间。例如:
"content_security_policy": "script-src 'self' 'sha256-MK0Gypb4mkZTI11eCOtWT+mGYcJNpN5zccvhfeaRb6E='"
Run Code Online (Sandbox Code Playgroud)
  1. 再次转到扩展页面。删除扩展程序,然后使用 按钮重新添加它Load unpacked
  2. 打开新标签页。您的扩展现在应该自动聚焦在<input>.

注意内联仅适用于 Manifest V2;尝试加载扩展时,Manifest V3 返回一条失败消息(即使使用格式正确的"content_security_policy"对象manifest.json来替换 Manifest V2"content_security_policy"字符串):

Failed to load extension
File C:\path\to\extension
Error 'content_security_policy.extension_pages': Insecure CSP value "'sha256-...'" in directive 'script-src'.
Could not load manifest.
Run Code Online (Sandbox Code Playgroud)


Joh*_*uff 5

根据Chrome扩展程序文档,

不要依赖具有键盘焦点的页面。用户创建新选项卡时,地址栏始终首先获得焦点。

请参阅此处的参考:替代页面