2012-01-04 12 views
8

मुझे कस्टम पैरामीटर के साथ कमांड लाइन से क्रोम लॉन्च करने की आवश्यकता है, जो में कुछ जेएस-फाइल के पथ शामिल हैं। इसके अलावा इस पथ का उपयोग एक्सटेंशन में किया जाएगा।क्या Google क्रोम एक्सटेंशन में कमांड लाइन पैरामीटर प्राप्त करने का कोई तरीका है?

मैंने ध्यान से सभी संबंधित दस्तावेज ब्राउज़ किए और क्रोम डीबगर में सभी नोड्स पर क्लिक किया, लेकिन कमांड लाइन पैरामीटर पर कुछ भी नहीं मिला। क्या यह संभव है कि इन पैरामीटर को प्राप्त करने के लिए या को अधिक जटिल npapi-extension लिखने के लिए इसकी आवश्यकता हो? (सैद्धांतिक रूप से ऐसे npapi- एक्सटेंशन में हम जीत-एपीआई, स्वयं प्रक्रिया के कमांड लाइन के माध्यम से स्वयं प्रक्रिया प्राप्त करने में सक्षम हैं और इसी तरह)।

+0

FYI करें, NPAPI दृष्टिकोण आप वर्णित काम नहीं करेगा क्योंकि प्लगइन एक में चल रहा हो जाएगा:

https://chrome.google.com/webstore/detail/gafgnggdglmjplpklcfhcgfaeehecepg/

स्रोत कोड पर उपलब्ध है पूरी तरह से अलग प्रक्रिया (कमांड लाइन पैरामीटर के साथ क्रोम द्वारा लॉन्च किया गया यह तय करता है)। – smorgan

+0

आप एक साथ गलत और सही हैं। मैंने पहले से ही इस तरह की योजना की कोशिश की है, और विस्तार के साथ अलग वर्तमान प्रक्रिया के बारे में जानकारी प्राप्त करना संभव है। इसका मतलब यह है कि परिणामस्वरूप माता-पिता प्रक्रिया और पेरेंट प्रक्रिया कमांड लाइन के बारे में जानकारी प्राप्त करने का तरीका भी है। – MontyBurns

+0

इसके अलावा मुझे विशेष पृष्ठ क्रोम: // संस्करण मिला। इस पृष्ठ में मुझे सटीक जानकारी है जो मुझे चाहिए - सभी स्विच के साथ कमांड लाइन। मैंने इस पृष्ठ को डीबग करने का प्रयास किया, लेकिन मेरे लिए कुछ भी उपयोगी नहीं पाया। – MontyBurns

उत्तर

4

हैक चेतावनी: this post कि क्वेरी स्ट्रिंग पैरामीटर, जैसे के रूप में सभी आदेश-पंक्ति पैरामीटर को खोलने के लिए एक नकली यूआरएल गुजर पता चलता है,

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

+1 धन्यवाद! मैंने इस दृष्टिकोण को थोड़ा सा परिष्कृत किया, कृपया। मेरा जवाब देखें। मुझे आपकी राय सुनकर खुशी होगी। – kol

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 विधि

+0

यह विधि केवल तभी काम करती है जब आपके पास संस्करण पृष्ठ खुलता है, इसे ठीक करने के लिए मैं $ .post को 'chrome.tabs.create ({url: versionPage, active: false}, function() { }); ' – Bloafer

+0

शायद एक बार पोस्ट पूरा हो जाने पर आप टैब को बंद कर सकते हैं :) – Bloafer

+0

यह तकनीक काम करने के लिए प्रयुक्त होती है, लेकिन अब क्रोम 47 पर नहीं। अब मैं बड़ी सफलता के साथ --user-agent तकनीक का उपयोग कर रहा हूं। –

3

मूल रूप सेमें दी गई तकनीक का उपयोग कर सकते हैं, लेकिन मैं नकली यूआरएल के बजाय 127.0.0.1:0 खोलता हूं। इस दृष्टिकोण के दो फायदे हैं:

  1. नाम संकल्प प्रयास छोड़ दिया गया है। ठीक है, अगर मैंने मौजूदा यूआरएल खोलने से बचने के लिए नकली यूआरएल सावधानीपूर्वक चुना है, तो नाम संकल्प निश्चित रूप से विफल हो जाएगा। लेकिन इसके लिए कोई ज़रूरत नहीं है, तो क्यों न सिर्फ इस कदम को छोड़ दें?
  2. कोई सर्वर टीसीपी पोर्ट 0 पर सुनता है। बस 127.0.0.1 का उपयोग करना पर्याप्त नहीं है, क्योंकि यह संभव है कि एक वेब सर्वर क्लाइंट मशीन पर चलता है, और मैं नहीं चाहता कि विस्तार गलती से कनेक्ट हो। तो मुझे एक पोर्ट नंबर निर्दिष्ट करना है, लेकिन कौन सा? पोर्ट 0 सही विकल्प है: RFC 1700 के अनुसार, यह पोर्ट नंबर "आरक्षित" है, यानी, सर्वरों को इसका उपयोग करने की अनुमति नहीं है।

उदाहरण कमांड लाइन अपने विस्तार करने के लिए तर्क abc और xyz पारित करने के लिए: (

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 "http://127.0.0.1:0/?abc=42&xyz=hello" 

आप इस तरह से background.js में इन तर्कों को पढ़ सकता है एक्सटेंशन के पृष्ठभूमि पृष्ठ का कंसोल):

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

शायद कमांड लाइन के माध्यम से एक कस्टम उपयोगकर्ता एजेंट स्ट्रिंग सेट में अपने एक्सटेंशन के पथ को पास करें। उदाहरण के लिए:

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

फिर, अपने विस्तार में:

var path = navigator.userAgent.split(":"); 
console.log(path[1]) 
0
इसके अलावा उत्तर देने के लिए URL का उपयोग कर में पैरामीटर पास, ध्यान दें कि केवल एक्सटेंशन, नहीं एप्लिकेशन, यह कर सकते हैं के बारे में ऊपर

।मैंने क्रोम एक्सटेंशन प्रकाशित किया है जो सिर्फ यूआरएल को रोकता है और इसे किसी अन्य ऐप पर उपलब्ध कराता है। ,

https://github.com/appazur/kiosk-launcher

के लिए Wi-Fi Public Display Screens

संबंधित मुद्दे