到目前为止,我无法弄清楚我的代码出了什么问题,因为当我点击图标时,它表示我同时运行了background.js和autofill.js。但是不会自动填充gmail站点。这是我的第一个chrome扩展以及使用javascript。我的最终目标是它可以自动填充所有站点(不仅仅是gmail),并能够存储/读取.txt文件中的所有密码。另一件事是,当我尝试运行此代码时,我的autofill.js文件出现问题,并且给出了错误“未捕获的TypeError:无法设置属性'的值为null。这是针对autofill.js的正确评论//填写您的用户名和密码。 感谢您抽出宝贵的时间帮助我,任何输入都会对我有所帮助,因为我被困在墙上
的manifest.json:
{
"name": "Test",
"manifest_version": 2,
"version": "1.0",
"description": "This is a Chrome extension that will autofill passwords",
"browser_action": {
"default_icon": "icon.png",
"default_popup":"popup.html",
"default_title": "PasswordFill"
},
//*********************************************************************
//declaring the permissions that will be used in this extension
"permissions": ["*://*.google.com/", "tabs", "activeTab", "*://*.yahoo.com/"],
"background": {
"scripts": ["background.js", "autofill.js"]
},
//*********************************************************************
/* Content scripts are JavaScript files that run in the context of web pages. By using the standard Document Object Model (DOM), they can read details of the web pages the browser visits, or make changes to them */
"content_scripts": [
{
//Specifies which pages this content script will be injected into
"matches": ["https://accounts.google.com/ServiceLoginAuth"],
//The list of JavaScript files to be injected into matching pages
"js": ["autofill.js"], //was background.js
//Controls when the files at "js" are being injected
"run_at": "document_end",
"all_frames": true
}
]
}
background.js:
console.log("Background.js Started .. "); //for debug purpose so i can see it in the console log
chrome.browserAction.onClicked.addListener(function (tab) { //Starts when User Clicks on ICON
chrome.tabs.executeScript(tab.id, {file: 'autofill.js'});
console.log("Script Executed .. "); // Notification on Completion
});
autofill.js:
console.log("Autofill.js Started .. "); //for debug purpose so i can see it in the console log
//define username and password
var myUsername = 'McAfee.sdp';
var myPassword = 'baskin310';
//finds the fields in your login form
var loginField = document.getElementById('Email');
var passwordField = document.getElementById('Passwd');
//fills in your username and password
loginField.value = myUsername;
passwordField.value = myPassword;
//automatically submits the login form
var loginForm = document.getElementById ('signIn');
loginForm.submit();
答案 0 :(得分:0)
您应该先花一些时间阅读开发guides。确保您了解debugging扩展的工作原理。
此外,作为一般规则,如果您的脚本在某些代码行崩溃,执行将停止,并且扩展很可能在您想要它做的任何事情上失败(取决于崩溃发生的位置) - 就像任何代码一样其他申请。
“未捕获的TypeError:无法将属性'value'设置为null。
该错误告诉您正在尝试“访问”(设置)“缺失”(null)对象的属性。 loginField.value = myUsername;
尝试访问value
loginField
,因此您可以轻松推断loginField
为空,这反过来意味着var loginField = document.getElementById('Email');
无效。但是不要相信我的话,学会自己调试它。
为什么它失败是一个不同的故事:扩展是“沙盒化的”,并且无论何时他们想要改变页面内容都无法运行 - 你有“内容脚本”。返回文档并阅读overview和content scripts sections。
在您的具体案例中:
chrome.tabs.executeScript