Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自chrome扩展的自动填充输入不';行不通_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 来自chrome扩展的自动填充输入不';行不通

Javascript 来自chrome扩展的自动填充输入不';行不通,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在尝试一个简单的Chrome扩展,但遇到了一个障碍。 我正在尝试自动填写登录表单(用户名和密码)。(作为禁用chrome自动填充功能时的备份) 我已经成功地向页面中注入了一个脚本,并且我可以将目标输入记录到console.log中。但它不会设定值 Manifest.json { "manifest_version": 2, "name": "Test Extension", "description": "Test Extension", "version": "1.0",

我正在尝试一个简单的Chrome扩展,但遇到了一个障碍。
我正在尝试自动填写登录表单(用户名和密码)。(作为禁用chrome自动填充功能时的备份)
我已经成功地向页面中注入了一个脚本,并且我可以将目标输入记录到console.log中。但它不会设定值

Manifest.json

{
  "manifest_version": 2,
  "name": "Test Extension",
  "description": "Test Extension",
  "version": "1.0",
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "index.html"
  },
  "content_scripts": [
    {
        "matches": [ "*://*.domain.net/*" ],
        "js": [ "autofill.js" ]
    }
  ],
  "permissions": [
    "tabs",
    "*://*.domain.net/*"
  ]
}
autofill.js

console.log( "Script properly injected into page" );

let usernameInput = document.querySelector( 'input[name="username"]' );
let passwordInput = document.querySelector( 'input[name="password"]' );

console.log( usernameInput );

usernameInput.value = "test";

这里缺少什么?

几乎可以肯定的是,您需要等待document loaded事件。事实上,在将元素加载到页面上之前,脚本已经完成

让您的autofill.js

console.log( "Script properly injected into page" );
document.addEventListener('DOMContentLoaded', function () {
    let usernameInput = document.querySelector( 'input[name="username"]' );
    let passwordInput = document.querySelector( 'input[name="password"]' );

    console.log( usernameInput );

    usernameInput.value = "test";
});

显然,问题在于Chrome的自动填充功能。将自动完成属性设置为
关闭
错误
新密码
,以防密码对我无效。Chrome似乎忽略了这一点。

我的解决方案是在执行代码之前添加一个小的超时。这远非理想,但它确实有效

setTimeout( () => {
    usernameInput.value = "username";
    passwordInput.value = "password"
}, 500 );

您是否尝试过使用
.val()
来设置值。我不想使用jQuery。
console.log(usernameInput)的输出是什么
如果我把它填到控制台中,愚蠢的事情是:
document.querySelector('input[name=“username”]”)。value=“test”该值为ChangedSonds逻辑值。尝试过,但由于某些原因,eventlistener中的所有内容都无法启动<代码>document.addEventListener('DOMContentLoaded',()=>{console.log('domFullLoaded and parsed');})
显然我不必等待DOM加载:我还尝试将
run\u at:document\u end
添加到我的manifest.json中,但没有效果。加载DOM后脚本运行的另一个证据是输入元素的console.log,如果它还没有加载,它将返回undefined。公平地说,对于小内容脚本,我通常使用“run_at”:“document_start”,这样我就知道在启动document ready listener之前已经注册了它。也许我错过了一个把戏。