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