需要有关Chrome扩展开发的重要建议

时间:2011-06-30 17:58:17

标签: javascript google-chrome-extension userscripts

对于模糊的标题感到抱歉,我会尽量详细说明。

如果您查看我在此网站上的上一个问题,您会看到我要求提供有关如何填充Chrome上下文菜单的提示。我使用上下文菜单的原因是我想要一个易于访问的界面,向用户显示值列表。这些值代表不同类型的文件(例如出生证明或税务报告)。这些文件中的每一个都具有独特的属性(例如:出生证明是“出生证明”和“身份证明”)和规则。当我必须将文件上传到DMS(文档管理系统)时,使用这些属性和规则,DMS基本上是ASP.Net网站。文本字段和下拉列表用于接收我之前提到的规则和属性。通常,在添加文件时,我必须根据文档类型手动填写这些字段,这是一个非常耗时的过程。

现在,我想要做的是简单地点击我的上下文菜单项之一(再次,假设我点击“出生证明”)和页面上的字段将自动使用相应的值进行更新。

到目前为止,我所做的是将大多数菜单项/文档类型及其相应的属性/规则放在JSON格式中。我的初衷是使用上下文菜单扩展中包含的脚本设置页面字段的值。只有,如果我没有弄错(如果我没有,请告诉我),您无法直接通过Chrome扩展程序修改网页上HTML元素的价值。

根据我的理解,用户脚本将能够完成该任务,但我仍然希望有一个控制界面(上下文菜单)来选择文档类型(我不想要一个总是用相同的参数)。

那么,根据我所描述的,你会说什么是实现这项任务的最佳方式?我可以“调用”用户脚本或至少传递一些参数,以便我可以根据需要修改文本字段/下拉列表的值吗?任何建议都非常重要。

P.S。我测试了一些脚本以查看字段是否实际上可以以编程方式更改其值。我只是在地址栏中使用“javascript:”前缀复制粘贴代码(带有一些字段的预定义值),它就像一个魅力!现在,我只需要

  • 1)能够在不使用此地址栏技巧和
  • 的情况下执行此操作
  • 2)有一个实际的界面来选择值而不是硬编码。

1 个答案:

答案 0 :(得分:1)

  

只有,如果我没有记错(如果我没有,请告诉我),您无法直接通过Chrome扩展程序修改网页上HTML元素的价值。

当然可以。查看content scripts,可以将其设置为在match a specified pattern的网站中自动注入。{3}}。您也可以通过chrome.tabs.executeScript进行编程注入。 Chrome扩展程序可以访问比用户脚本更多的工具。

您只需使用creating your context menu时设置的onclick回调,然后就可以运行:

chrome.tabs.executeScript(null, { file: "script_to_inject.js"});

加载该脚本后,您有几个选项,但我只需使用message passing从您的背景页面获取相应的信息,然后修改字段。

简单示例

manifest.json(将此添加到您的权限中)

"permissions": [ "http://*/*" ],

script_to_inject.js

chrome.extension.sendRequest("options", function(response) {
  alert(response.birthday); // Alerts the birthday in the response
  alert(response.name);     // Alerts the name in the response
  document.getElementById("some_field_id").value = response.name;
});

background.html(或background.js)

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
  switch (request) {
    case "options":
      sendResponse({birthday: "1/1/1970", name: "Unix"});
      break;
    default: // Add other cases as you see fit
      sendResponse({});
      break;
  }
});