我正在尝试编写我的第一个Chrome扩展程序。点击后,它会自动填写我大学登录页面的ID和密码字段(其表格的自动填充功能已禁用)。 这是一个非常具体的页面。
我有一些问题。 我搜索了Google和SO,但无法找到有关如何通过Chrome更改文本字段值的说明。我知道如何在HTML和JavaScript中执行此操作,但是我无法获得正确的输入来修改其文本。
我也尝试过使用我发现的一些例子使用jQuery,但没有运气。 我有一个调用JavaScript文件的HTML页面(popup.html)。 我也尝试将JS放在内容脚本中
这是manifest.json:
{
"name": "My First Extension",
"version": "1.0",
"manifest_version": 2,
"description": "The first extension that I made.",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"tabs", "http://*/*"
],
"content_scripts": [
{
"matches": ["http://*/*"],
"js": ["jquery-1.7.2.min.js","content.js"]
}
]
}
我尝试popup.js(从popup.html调用)之一是:
chrome.tabs.getSelected(null, function(tab) {
console.log(document)
});
我也尝试将此代码放在content.js中。同样的结果, 它打印到控制台,但它打印popup.html内容..
我也尝试直接(并从上面的方法)直接通过document.getElementById()
访问元素,但仍然没有运气..
所以, 谁能告诉我我做错了什么?
答案 0 :(得分:7)
您需要使用“web_accessible_resources”属性将JavaScript文件注入页面。见这里:
<强>的manifest.json 强>
{
"name": "My First Extension",
"version": "1.0",
"manifest_version": 2,
"description": "The first extension that I made.",
"browser_action": {
"default_icon": "icon.png"
},
"permissions": [
"tabs", "http://*/*"
],
"content_scripts": [
{
"matches": ["http://*/*"],
"js": ["jquery-1.7.2.min.js","content.js"],
"run_at": "document_start"
}
],
"web_accessible_resources": ["inject.js"]
}
<强> inject.js 强>
(function () {
console.log('test');
}());
<强> content.js 强>
(function (chrome) {
var js = document.createElement('script');
js.type = 'text/javascript';
js.src = chrome.extension.getURL('inject.js');
document.getElementsByTagName('head')[0].appendChild(js);
}(chrome));
然后只需要在inject.js中使用您想要使用的JavaScript代码来操作页面。请务必将匹配更改为仅匹配大学的登录页面。
之所以出现这种情况,是因为Chrome扩展程序可以自行运行和运行,无论您使用的是哪个网站。他们可以在切换页面时继续处理。他们在自己的沙盒环境中。
答案 1 :(得分:2)
我认为您应该使用在登录页面上执行的简单内容脚本。您甚至不需要任何浏览器操作或弹出窗口。
这是一个清单:
{
"name": "Fill my password",
"version": "1.0",
"manifest_version": 2,
"description": "Fills my password on University login page",
"content_scripts": [
{
"matches": ["http://www.myuniversity.edu/login.html"],
"js": ["content.js"]
}
]
}
这是一个内容脚本:
// define your username and password
var myUsername = '...';
var myPassword = '...';
// find the fiends in your login form
var loginField = document.getElementById('...');
var passwordField = document.getElementById('...');
// fill in your username and password
loginField.value = myUsername;
passwordField.value = myPassword;
// if you want, you can even automaticaly submit the login form
var loginForm = document.getElementById('...');
loginForm.submit();
答案 2 :(得分:0)
可能的解决方法(Chrome扩展程序):Autocomplete = on,但它无法用于某些表单。