5

我正在尝试编写我的第一个 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()但仍然没有运气..

那么,谁能告诉我我做错了什么?

4

3 回答 3

7

您需要使用“web_accessible_resources”属性将 JavaScript 文件注入页面。看这里:

清单.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"]
}

注入.js

(function () {
    console.log('test');
}());

内容.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));

然后只需将要使用的 JavaScript 代码放入 inject.js 即可操作页面。请务必将匹配项更改为仅匹配您大学的登录页面。

出现这种情况的原因是,无论您在哪个网站上,Chrome 扩展程序都可以自行运行和操作。他们可以在您切换页面时继续处理。他们在自己的沙盒环境中。

于 2012-08-07T19:17:49.820 回答
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();
于 2012-08-08T04:34:32.443 回答
0

可能的解决方法(chrome 扩展):Autocomplete = on,但它不适用于某些表单。

于 2012-08-07T19:26:14.787 回答