2009-12-30 10 views
112

मैं गूगल क्रोम एक्सटेंशन के साथ मज़ा आ रहा हूँ, और मैं बस पता है कि कैसे मैं एक चर में मौजूदा टैब का URL स्टोर कर सकते हैं करना चाहते हैं?मैं एक गूगल क्रोम विस्तार से मौजूदा टैब का URL कैसे मिल सकता है?

उत्तर

64

एक दोस्त ने मेरे सवाल का जवाब देता है।

सबसे पहले, आप टैब एपीआई के लिए अनुमतियां सेट करने है:

chrome.tabs.getSelected(null,function(tab) { 
    var tablink = tab.url; 
}); 
+0

कोड का दूसरा भाग पॉपअप फ़ाइल के मामले में है – Axiol

+1

इसका कारण पॉपअप (पृष्ठ क्रिया, ब्राउज़र क्रिया) के लिए क्यों है क्योंकि यह पहले पैरामीटर में "शून्य" में भेज रहा है। http://code.google.com/chrome/extensions/tabs.html#method-get चयनित दस्तावेज़ों का पहला पैरामीटर विंडो आईडी है, यदि आप इसे विकल्पों में या पृष्ठभूमि पृष्ठ में उपयोग करना चाहते हैं, तो आपको इसकी आवश्यकता होगी विंडो आईडी में डालने के लिए या आपको वर्तमान टैब को आपके दृश्य को अनदेखा कर दिया जाएगा, विकल्प क्रमशः। –

+1

हाँ यह काम करता है, लेकिन यह सुनिश्चित नहीं है कि chrome.tabs.getSelected विधि संदर्भ दस्तावेज़ में क्यों नहीं मिल सकती है। – swimmingfisher

2

हाय यहाँ एक गूगल क्रोम नमूना जो ईमेल वर्तमान साइट है:

"permissions": [ 
    "tabs" 
] 

और यूआरएल स्टोर करने के लिए एक दोस्त को पीछे मूल विचार यह है कि आप क्या चाहते हैं ... सबसे पहले यह पृष्ठ की सामग्री प्राप्त करता है (आपके लिए interessting नहीं) ... बाद में यह यूआरएल (< - अच्छा हिस्सा)

इसके अतिरिक्त यह एक है अच्छा काम करने वाला कोड उदाहरण, जिसे मैं दस्तावेजों को पढ़ने पर दृढ़ता से पसंद करता हूं।

यहां पाया जा सकता है: Email this page

24

समस्या यह है कि chrome.tabs.getSelected अतुल्यकालिक है। नीचे दिया गया यह कोड आम तौर पर अपेक्षित काम नहीं करेगा।

var tablink; 
chrome.tabs.getSelected(null,function(tab) { 
    tablink = tab.url; 
}); 
console.log(tablink); 

समाधान कोड जहां का उपयोग किया जाएगा रैप करने के लिए है: 'tablink' का मान अभी भी जब यह कंसोल के लिए लिखा है क्योंकि getSelected अभी तक कॉलबैक कि मूल्य को रीसेट करता है नहीं निरस्त कर दिया है अपरिभाषित हो जाएगा एक समारोह में मूल्य और इसे चुनने के द्वारा लागू किया गया है। इस तरह आप क्योंकि आपके कोड मूल्य के लिए प्रतीक्षा करने से पहले इसे क्रियान्वित किया जाता है प्रदान की जानी चाहिए, हमेशा एक मूल्य के सेट है की गारंटी है।

कोशिश कुछ की तरह:

chrome.tabs.getSelected(null, function(tab) { 
    myFunction(tab.url); 
}); 

function myFunction(tablink) { 
    // do stuff here 
    console.log(tablink); 
} 
+0

कोड के लिए धन्यवाद, यह मेरे लिए काम करता है, "टैब" को manifest.json फ़ाइल "अनुमतियों" में अनुमतियों में जोड़ने की आवश्यकता है: [ "टैब" ] –

+0

यह भी एक आकर्षण की तरह काम करता है: [पॉपअप (Google क्रोम एक्सटेंशन) पर वर्तमान विंडो प्राप्त करना] (http://stackoverflow.com/questions/3030738/getting-current-window-on-a-popup-google-chrome-extension) – chemark

+0

और, कैसे प्राप्त करें सभी खुले टैब के लिंक – Enve

118

अद्यतन:chrome.tabs.getSelected() विधि अब मान्य नहीं है।

मौजूदा टैब का URL प्राप्त करने की सिफारिश की जिस तरह से chrome.tabs.query() उपयोग करने के लिए है।

एक उदाहरण उपयोग:

chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) { 
    var url = tabs[0].url; 
}); 

इसके लिए आवश्यक है कि आप अपने extension manifest में chrome.tabs API तक पहुंच अनुरोध है कि:

"permissions": [ ... 
    "tabs" 
] 

यह ध्यान रखें कि अपने "वर्तमान टैब 'की परिभाषा के लिए महत्वपूर्ण है आपके विस्तार की जरूरतों के आधार पर भिन्न हो सकता है।

क्वेरी में lastFocusedWindow: true सेट करना उचित है जब आप उपयोगकर्ता की केंद्रित विंडो (आमतौर पर सबसे ऊपर की खिड़की) में वर्तमान टैब तक पहुंचना चाहते हैं।

currentWindow: true सेट करना आपको उस विंडो में वर्तमान टैब प्राप्त करने की अनुमति देता है जहां आपका एक्सटेंशन का कोड वर्तमान में निष्पादित हो रहा है। उदाहरण के लिए, इस उपयोगी अपने विस्तार एक नई विंडो/पॉपअप (बदलते फोकस) बनाता है, लेकिन अभी भी खिड़की जहां विस्तार से चलाया गया था टैब जानकारी का उपयोग करना चाहता है हो सकता है।

मैं क्योंकि गूगल मामलों से जुड़ी जानकारी इस उदाहरण में lastFocusedWindow: true उपयोग करने के लिए, चुना है जो currentWindowmay not always be present में।

लिए आप अपने टैब क्वेरी गुण यहां परिभाषित के किसी भी उपयोग को परिष्कृत करने के लिए स्वतंत्र हैं: chrome.tabs.query

+13

यूआरएल हमेशा अनिर्धारित क्यों है? – nnm

+0

यदि यूआरएल अनिर्धारित है तो क्रोम से अपने एक्सटेंशन को पुनः लोड करने का प्रयास करें: // एक्सटेंशन यह एक्सटेंशन की कॉन्फ़िगरेशन को फिर से लोड करेगा और नए जोड़े गए "टैब" अनुमति को लागू करेगा। – flashbackzoo

+1

यूआरएल अनिर्धारित है क्योंकि http://stackoverflow.com/questions/28786723/why-doesnt-chrome-tabs-query-return-the-tabs-url-when-called-using-requirejs (उत्तर: अपने देव उपकरण विंडो को बंद करें या lastFocusedWindow के बजाए वर्तमान विन्डो में बदलें) – kspearrin

0

context menu api का उपयोग कर उन लोगों के लिए, डॉक्स कैसे टैब में जानकारी प्राप्त करने पर तुरंत स्पष्ट नहीं हैं।

chrome.contextMenus.onClicked.addListener(function(info, tab) { 
    console.log(info); 
    return console.log(tab); 
    }); 

https://developer.chrome.com/extensions/contextMenus

-1

आप this पर जांच करने के लिए है।

एचटीएमएल

<button id="saveActionId"> Save </button> 

manifest.json

"permissions": [ 
    "activeTab", 
    "tabs" 
    ] 

जावास्क्रिप्ट
नीचे कोड बटन के हिस्से के रूप में JSON वस्तु में सक्रिय विंडो के सभी यूआरएल की बचत होगी पर क्लिक करें।

var saveActionButton = document.getElementById('saveActionId'); 
saveActionButton.addEventListener('click', function() { 
    myArray = []; 
    chrome.tabs.query({"currentWindow": true}, //{"windowId": targetWindow.id, "index": tabPosition}); 
    function (array_of_Tabs) { //Tab tab 
     arrayLength = array_of_Tabs.length; 
     //alert(arrayLength); 
     for (var i = 0; i < arrayLength; i++) { 
      myArray.push(array_of_Tabs[i].url); 
     } 
     obj = JSON.parse(JSON.stringify(myArray)); 
    }); 
}, false); 
+0

सक्रिय विंडो पर यूआरएल की बचत के लिए मेरा क्रोम एक्सटेंशन https://chrome.google.com/webstore/detail/tabstore-plugin/jngplpdonggccbjlmbphlbancacmpmpp –

14

अन्य उत्तरों मानते हैं कि आप इसे पॉपअप या पृष्ठभूमि स्क्रिप्ट से जानना चाहते हैं।

मामले में आप एक सामग्री स्क्रिप्ट से वर्तमान URL जानना चाहते हैं, मानक जे एस तरीका लागू होता है:

window.location.toString() 

आप इस तरह के मेजबान के रूप में यूआरएल के अलग अलग हिस्सों में पहुंचने के लिए window.location के गुणों का उपयोग कर सकते प्रोटोकॉल या पथ।

+0

थंब अप, सबसे सरल समाधान है। – dalvarezmartinez1

+0

ग्रेट उत्तर। मैं चाहता था कि मैं "stackoverflow.com" पर हूं या नहीं, यह देखने के लिए 'window.location.host' था। – Salyangoz

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