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

时间:2014-10-16 22:29:01

标签: javascript google-chrome google-chrome-extension submit code-injection

我正在尝试创建一个扩展程序,一旦检测到我没有登录就会将我登录到网站 - 忽略我的background.js现在不执行此操作的事实,这不是问题。 - 我尝试登录的网站上的用户名和密码已填入我的Chrome密码字段中。所有脚本要做的就是单击登录按钮。

基本上它似乎工作,除了它没有登录的事实。每当脚本尝试登录时,我得到的信息是我的用户名/密码不正确。当我通过控制台执行脚本而不是通过我的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

document.getElementById("loginForm").submit();

感谢任何和所有帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

我不知道为什么使用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>

options.js

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();