2011-06-30 98 views
1

对于模糊的标题很抱歉,我会尽量详细描述。需要关于Chrome扩展开发的重要建议

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

,我做的是简单地能够点击我的上下文菜单中的项目之一(同样,假设我点击“出生证”)和页面上的字段将自动更新与相应的值。

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

据我所知,userscript将能够完成这项任务,但我仍然希望有一个控制界面(上下文菜单)来选择文档类型(我不想要一个始终执行的脚本相同的参数)。

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

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

  • 1)能够做到这一点,而不使用这个地址栏招和
  • 2)有一个实际的接口选择值,而不是只是硬编码他们。只有
+1

仅阅读其他评论如果您可以考虑另一个选项而不是谷歌浏览器插件.........而不是限制用户完成此任务的浏览器,您可以使用ASP.net(和javascript)并添加一些“自动填充”选项。用户将点击自动填充按钮,该字段的值将从数据库中提取并自动填充。这可以从任何浏览器完成,并将节省您的时间代码插件为其他人.. –

回答

1

,如果我没有记错的话(如果我,请告诉我),你不能直接通过浏览器扩展程序修改网页上的HTML元素的值。

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

你只使用任何onclick回调你当creating your context menu设置,那么你会运行:

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; 
    } 
}); 
+0

好吧,只是让我明白:onclick回调将包含chrome.tabs.executeScript(空,{file:“script_to_inject.js”} ),其中“script_to_inject.js”只包含改变字段的脚本(没有指令立即运行)。我在消息传递部分仍然很模糊,但是我只需要调用我用正确的参数添加的脚本,然后就可以完成剩下的工作。我是否正确? –

+0

@菲尔右,你注入的脚本只是一个文件;你不能添加参数。一旦该文件加载完成,您就可以将请求发送到后台脚本以获取信息,后台脚本将作出响应。这是一个强大的工具,所以它可能会让人感觉过度杀伤,但如果你想稍后改变它,这是最好的办法。有关更多详细信息,这里有[问题的重点](http://stackoverflow.com/search?q=message+passing+%5Bgoogle-chrome-extension%5D)。 – brymck

+0

@Phil其实,你可以看到上面的例子。 – brymck