有没有办法在Google Chrome扩展程序中获取命令行参数?

时间:2012-01-04 11:10:40

标签: google-chrome command-line google-chrome-extension

我需要使用自定义参数从命令行启动Chrome 包含一些js文件的路径。此进一步将使用此路径 扩展

我仔细浏览了所有相关文档,然后点击了所有节点 Chrome调试器,但在命令行上找不到任何类似的东西 参数。无论如何都可以获得这些参数或它的需要 写更复杂的npapi-extension? (理论上在这样的npapi- 扩展我们能够通过win-api,命令行获得自我进程 自我过程等)。

4 个答案:

答案 0 :(得分:4)

黑客警报:this post建议将伪URL传递给open,其中包含所有命令行参数作为查询字符串参数,例如,

chrome.exe http://fakeurl.com/?param1=val1&param2=val2

答案 1 :(得分:4)

也许可以通过命令行在自定义用户代理字符串集中将路径传递给您的扩展。例如:

chrome.exe --user-agent='Chrome 43. My path is:/path/to/file'

然后,在你的扩展程序中:

var path = navigator.userAgent.split(":");
console.log(path[1])

答案 2 :(得分:3)

基本上我使用@dfrankow's answer中给出的技术,但我打开127.0.0.1:0而不是假URL。这种方法有两个优点:

  1. 会跳过名称解析尝试。好的,如果我仔细选择了假网址以避免打开现有网址,则名称解析肯定会失败。但是没有必要,为什么不跳过这一步呢?
  2. 没有服务器侦听TCP端口0仅使用127.0.0.1是不够的,因为Web服务器可能在客户端计算机上运行,​​而且我不喜欢不希望扩展程序意外连接到它。所以我必须指定一个端口号,但是哪一个?端口0是完美的选择:根据RFC 1700,此端口号是“保留的”,即不允许服务器使用它。
  3. 将参数abcxyz传递到您的扩展程序的示例命令行:

    chrome "http://127.0.0.1:0/?abc=42&xyz=hello"
    

    您可以这样在background.js中阅读这些参数:

    chrome.windows.onCreated.addListener(function (window) {
        chrome.tabs.query({}, function (tabs) {
            var args = { abc: null, xyz: null }, argName, regExp, match;
            for (argName in args) {
                regExp = new RegExp(argName + "=([^\&]+)")
                match = regExp.exec(tabs[0].url);
                if (!match) return;
                args[argName] = match[1];
            }
            console.log(JSON.stringify(args));
        });
    });
    

    控制台输出(在扩展程序后台页面的控制台中):

    {"abc":"42","xyz":"hello"} 
    

答案 3 :(得分:1)

你可以尝试:

var versionPage = "chrome://version/strings.js";
$.post(versionPage, function(data){
    data = data.replace("var templateData = ", "");
    data = data.slice(0, -1);
    var jsonOb = $.parseJSON(data);
    alert(jsonOb.command_line);
});

这假设您在加载序列中使用jQuery,您始终可以使用任何其他AJAX方法替换