【问题标题】:Google Chrome extension's content script not working on few pages谷歌浏览器扩展的内容脚本在几个页面上不起作用
【发布时间】:2016-04-25 06:54:21
【问题描述】:

我正在开发一个简单的 Chrome 扩展程序,当密码输入框被聚焦时它会做一些事情。我正在使用以下内容脚本来实现相同的目的(为了提出这个问题而简化了代码)。该代码不适用于https://accounts.google.com/ 之类的页面,但它适用于https://www.linkedin.com/ 之类的页面。是因为一些 Javascript/JQuery 冲突吗?还是其他什么原因?请帮忙。我尝试使用 noConflict api,但没有帮助。

内容脚本:

var inputs = document.getElementsByTagName('input');
function foo() {
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].type.toLowerCase() == 'password')
            inputs[i].addEventListener("focus", bar);
    }
}

function bar() {
    alert(1);
}

foo();

以上脚本查找密码类型的输入元素,但不添加事件监听器。

清单:

{
    "manifest_version": 2,
    "name":    "MyExtension",
    "version": "1.0",
    "options_page": "options.html",
    "browser_action": {
        "default_icon": "img/abcd.png",
        "default_title": "MyExtension",
        "default_popup": "popup.html"
    },"icons": { "16": "img/abcd16.png",
           "48": "img/abcd48.png",
          "128": "img/abcd128.png" },"description":"abcd abcd",
    "permissions": [
        "storage","tabs"
     ],
    "content_scripts": [
        {
            "matches": ["<all_urls>"
            ],
            "js":     ["js/content.js","js/jquery.1.8.3.min.js"],
            "css": ["css/style.css"],
            "run_at": "document_end",
            "all_frames": true
        }
    ],"web_accessible_resources": [
    "img/*.png",
    "css/*.css"
  ]
}

【问题讨论】:

  • 您能否也提供您的manifest.json?如果您在matches 字段中声明google,上面的代码应该可以正常工作。
  • 我已经在匹配字段中声明了 。我应该工作好吗?它适用于linkedin或twitter等网站!
  • 其实我最后也只是测试了一下,google也很好用,只要有密码输入就可以了。
  • 无论如何,它可以帮助我们使用提供的 manifest.json 进行调试。
  • 你不使用 jQuery,即使你使用了,你也会在脚本之后加载它。

标签: google-chrome-extension content-script


【解决方案1】:

您是否考虑过在脚本执行时您寻找的输入字段不存在? https://accounts.google.com/ 是一个动态表单,密码字段是在页面加载很久之后创建的(document_end),因此在您收集inputs 之后很久。

除了将处理程序绑定到现有元素之外,您还需要注意添加的新元素。我建议使用 mutation-summary library 和查询 {element: "input[type=password]"},但如果您不想涉及库,则要查看的基本构建块是 MutationObserver

【讨论】:

  • 作者说找到了inputs,但是没有触发focus事件。
  • 我不相信。他发布的代码找不到它们。并且调试“简化代码”可能毫无意义(可能不是,也许它是一个合适的 MCVE)。
  • 这可能对 Xan 有帮助!因为无论网站如何运行,它们在页面加载时都有密码字段。尽管在 Google 上,我的代码可以找到 ID 为 Passwd-hidden 的密码输入!但它会动态地显示给用户。
  • @AkhilDixit,这是否意味着问题已解决?当输入处于焦点状态时,任何其他焦点都不会触发焦点事件
  • 另一种可能性:这可能不会触发由脚本设置的焦点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
相关资源
最近更新 更多