Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome 有没有办法在Google Chrome扩展中获取命令行参数?_Google Chrome_Command Line_Google Chrome Extension - Fatal编程技术网

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

Google chrome 有没有办法在Google Chrome扩展中获取命令行参数?,google-chrome,command-line,google-chrome-extension,Google Chrome,Command Line,Google Chrome Extension,我需要使用自定义参数从命令行启动Chrome,这 包含一些js文件的路径。此外,此路径将在中使用 分机 我仔细浏览了所有相关文档,并单击了中的所有节点 Chrome调试器,但在命令行中找不到类似的内容 参数。是否有可能获得这些参数,或者是否需要这些参数 要编写更复杂的npapi扩展?(理论上在此类npapi中)- 扩展我们能够通过WinAPI,命令行 自我过程等) 黑客警报:建议传递一个假URL以打开,该URL将所有命令行参数作为查询字符串参数,例如 chrome.exe http://fake

我需要使用自定义参数从命令行启动Chrome,这 包含一些js文件的路径。此外,此路径将在中使用 分机

我仔细浏览了所有相关文档,并单击了中的所有节点 Chrome调试器,但在命令行中找不到类似的内容 参数。是否有可能获得这些参数,或者是否需要这些参数 要编写更复杂的npapi扩展?(理论上在此类npapi中)- 扩展我们能够通过WinAPI,命令行 自我过程等)

黑客警报:建议传递一个假URL以打开,该URL将所有命令行参数作为查询字符串参数,例如

chrome.exe http://fakeurl.com/?param1=val1&param2=val2
你可以试试:

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方法替换它

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

  • 跳过名称解析尝试。好的,如果我仔细选择了假URL以避免打开现有URL,名称解析肯定会失败。但是没有必要这么做,为什么不跳过这一步呢
  • 没有服务器侦听TCP端口
    0
    仅使用
    127.0.0.1
    是不够的,因为web服务器可能在客户端计算机上运行,我不希望扩展意外连接到它。所以我必须指定一个端口号,但是哪一个?端口
    0
    是最佳选择:根据,此端口号为“保留”,即不允许服务器使用 将参数
    abc
    xyz
    传递给扩展名的命令行示例:

    chrome "http://127.0.0.1:0/?abc=42&xyz=hello"
    
    {"abc":"42","xyz":"hello"} 
    
    var path = navigator.userAgent.split(":");
    console.log(path[1])
    
    您可以通过以下方式读取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));
        });
    });
    
    控制台输出(在扩展后台页面的控制台中):


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

    chrome.exe --user-agent='Chrome 43. My path is:/path/to/file'
    
    然后,在您的扩展中:

    chrome "http://127.0.0.1:0/?abc=42&xyz=hello"
    
    {"abc":"42","xyz":"hello"} 
    
    var path = navigator.userAgent.split(":");
    console.log(path[1])
    

    除了上面关于使用URL传递参数的答案之外,请注意,只有扩展,而不是应用程序可以这样做。我已经发布了一个Chrome扩展,它只截取URL并将其提供给另一个应用程序

    源代码可从以下网址获得:


    对于

    FYI,您描述的NPAPI方法将不起作用,因为插件将在一个完全不同的进程中运行(由Chrome启动,命令行参数由它决定)。您是错的,同时也是对的。我已经尝试过这样的方案,并且可以通过扩展获得关于单独当前进程的信息。这意味着还有一种方法可以获取有关父进程和父进程命令行的信息chrome://version. 此页面包含我需要的确切信息-带所有开关的命令行。我尝试调试此页面,但没有发现任何有用的内容。显示在
    chrome://version
    chrome://version/strings.js
    但不允许扩展访问它。此方法仅在打开版本页时有效,若要解决此问题,我会将$.post包装为:
    chrome.tabs.create({url:versionPage,活动:false},函数(){})
    也许一旦文章完成,你就可以关闭标签:)这项技术过去是有效的,但在chrome 47上不再有效了。我现在使用--user-agent技术取得了巨大成功。+1谢谢!我对这一方法做了一些改进,请查看我的答案。我很高兴听到你的意见。Works…可能还想在前面加上
    /
    /chrome.exe MY_URL
    这两个链接都死掉了对不起,是的,我改为使用组策略获取应用程序的参数,因此未发布。