Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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 扩展无法正确提交表单,但控制台将_Javascript_Google Chrome_Google Chrome Extension_Submit_Code Injection - Fatal编程技术网

Javascript 扩展无法正确提交表单,但控制台将

Javascript 扩展无法正确提交表单,但控制台将,javascript,google-chrome,google-chrome-extension,submit,code-injection,Javascript,Google Chrome,Google Chrome Extension,Submit,Code Injection,我正在尝试创建一个扩展,一旦它检测到我没有登录,就会将我登录到一个网站-忽略我的background.js现在没有这样做的事实,这不是问题所在。-我试图登录的网站已经通过我的Chrome密码在字段中填写了我的用户名和密码。脚本所要做的就是单击login按钮 从本质上讲,它似乎是有效的,除了它没有登录这个事实。每当脚本尝试登录时,我都会收到一条消息,说明我的用户名/密码不正确。当我通过控制台执行脚本而不是通过background.js注入脚本时,它工作得非常好 background.js chro

我正在尝试创建一个扩展,一旦它检测到我没有登录,就会将我登录到一个网站-忽略我的background.js现在没有这样做的事实,这不是问题所在。-我试图登录的网站已经通过我的Chrome密码在字段中填写了我的用户名和密码。脚本所要做的就是单击login按钮

从本质上讲,它似乎是有效的,除了它没有登录这个事实。每当脚本尝试登录时,我都会收到一条消息,说明我的用户名/密码不正确。当我通过控制台执行脚本而不是通过background.js注入脚本时,它工作得非常好

background.js

chrome.tabs.onUpdated.addListener(function(id, info, tab){
    if (tab.status !== "complete"){
        return;
    }
        chrome.tabs.executeScript(null, {"file": "login.js"});
});
login.js表单id为loginForm


非常感谢您的帮助。谢谢

我不知道为什么用Chrome保存的帐户信息提交表单不起作用,但我做了一个变通办法,让用户在使用扩展之前保存他的帐户信息

popup.html

<!DOCTYPE html>
<html>
<head><title>Such Activity Options</title></head>
<body>

Username
<label>
  <input type="text" id="username">
 </label>
<br>
Password
<label>
  <input type="password" id="password">
 </label>


<div id="status"></div>
<button id="save">Save</button>

<script src="options.js"></script>
</body>
</html>
然后注入此脚本以读取这些脚本,并将其设置为表单的值,然后提交

function clickLogin() {
        document.getElementById("loginForm").submit();
}

function enterLoginInfo() {
  chrome.storage.sync.get({
    userName: 'username',
    passWord: 'password'
  }, function(items) {
    document.getElementById('usernameLogin').value = items.userName;
    document.getElementById('passwordLogin').value = items.passWord;
  });
        delay = Math.floor((Math.random() * (360000)) + 30000);
        setTimeout(function(){clickLogin()}, delay);
}

enterLoginInfo();

可能重复我的问题是不提交表格,它工作正常。它提交了表格。问题是,网站事后告诉我,用户名/密码是错误的,即使它们是正确的。然后你应该告诉我们关于网站的更多细节,以及你的脚本背后的逻辑是什么,否则我们不能做太多…如果一些东西从控制台工作,但从扩展不工作,这通常是一个上下文问题。顺便说一句,您应该使用id而不是null来插入脚本,否则您可能会在错误的选项卡中执行此操作。如果没有用户输入,也可能无法提交自动完成插入的密码。但我只是在猜测,为什么要把document.getElementByIdloginForm.submit;退出chrome.storage.sync.get的回调,然后呢?在执行回调之前调用它。。。这和直接调用它是一样的……我需要登录才能延迟工作,但我想我不需要在这里发布,因为这与问题无关。将它编辑成我现在实际使用的脚本。好吧,马可是绝对正确的。您根本不需要延迟,只需将您的clickLogin放入回调中。异步函数等等。
function saveAccount() {
  var username = document.getElementById('username').value;
  var password = document.getElementById('password').value;
  chrome.storage.sync.set({
    userName: username,
    passWord: password
  }
}
function clickLogin() {
        document.getElementById("loginForm").submit();
}

function enterLoginInfo() {
  chrome.storage.sync.get({
    userName: 'username',
    passWord: 'password'
  }, function(items) {
    document.getElementById('usernameLogin').value = items.userName;
    document.getElementById('passwordLogin').value = items.passWord;
  });
        delay = Math.floor((Math.random() * (360000)) + 30000);
        setTimeout(function(){clickLogin()}, delay);
}

enterLoginInfo();