javascript - Chrome 新标签页扩展从地址栏窃取焦点

标签 javascript html google-chrome-extension

在 Chrome 27 中,覆盖 Chrome 新标签页的扩展程序似乎无法像以前版本的 Chrome 那样将焦点从 Chrome 的多功能框上移开。

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

要对此进行测试,请创建一个包含三个文件的扩展文件夹:

<强>1。 list .json:

{
    "name": "Focus Test",
    "version": "0",
    "minimum_chrome_version": "27",
    "chrome_url_overrides": {
        "newtab": "newTab.html"
    },
    "manifest_version": 2
}

<强>2。焦点.js:

document.getElementById('foo').focus();

<强>3。 newTab.html:

<html>
    <body>
        <input id="foo" type="text" />
        <script type="text/javascript" src="focus.js"></script>
    </body>
</html>

然后,当您加载扩展程序并打开新标签页时,输入字段不会聚焦在新标签页上。

我也曾尝试将 autofocus 属性添加到 input 字段,但也没有成功。该扩展程序的新标签页无法将焦点从 Chrome 的多功能框上移开。

有什么想法吗?这是错误还是新“功能”?

最佳答案

ManifestV3更新

此答案改编自https://stackoverflow.com/a/11348302/1754517 .
这已经通过 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
  }
  1. 添加 autofocus属性为 <input> .
  2. 转到 Chrome 中的“扩展程序”页面并点击 Load unpacked按钮。选择您的扩展程序的文件夹。
  3. 打开新标签页。您可能会看到模式对话阅读 Change back to Google? .点击Keep it保留您的自定义新标签页。
内联 Javascript - 仅限 Manifest V2

如果您要在 HTML 文件中内联 Javascript,则需要采取一些额外的步骤:

  1. 将内联 Javascript 添加到 HTML 文件后,打开 DevTools(F12 键)并观察控制台中的错误输出。您应该看到的示例输出:
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.
  1. 选择并复制此散列。
  2. 添加一行到manifest.json允许 JS 运行,粘贴您刚刚在单引号之间复制的散列。例如:
"content_security_policy": "script-src 'self' 'sha256-MK0Gypb4mkZTI11eCOtWT+mGYcJNpN5zccvhfeaRb6E='"
  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.

关于javascript - Chrome 新标签页扩展从地址栏窃取焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16684663/

相关文章:

Javascript 错误地从字面上解析变量

javascript - 将变量设置为函数,但该函数不应被执行

javascript - 尝试构建查询字符串并抓取 Google 结果

google-chrome-extension - 如何通过内容安全策略允许外部脚本加载到 Chrome 扩展 popup.html 中?

javascript - JQuery:重用提交功能

javascript - 如何更改 AJAX 响应 HTML,然后继续在 jQuery 中替换?

javascript - 如何防止div滚出页面

html - 音频html标签无法快进或快退控制

html - 垂直对齐另一个具有动态高度的 div 内的 div

google-chrome - 如何从任何页面的 javascript 访问 google chrome 扩展