मैं Google Chrome एक्सटेंशन से वर्तमान टैब का URL कैसे प्राप्त कर सकता हूं?


187

मैं Google Chrome एक्सटेंशन के साथ मज़े कर रहा हूं, और मैं केवल यह जानना चाहता हूं कि मैं एक चर में वर्तमान टैब के URL को कैसे स्टोर कर सकता हूं?

जवाबों:


216

chrome.tabs.query()इस तरह का उपयोग करें:

chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
    let url = tabs[0].url;
    // use `url` here inside the callback because it's asynchronous!
});

इसके लिए आवश्यक है कि आप chrome.tabsअपने एक्सटेंशन मेनीफ़ॉर्म में एपीआई तक पहुंच का अनुरोध करें :

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

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

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

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

मैंने lastFocusedWindow: trueइस उदाहरण में उपयोग करने के लिए चुना , क्योंकि Google उन मामलों को कॉल करता है जिनमें currentWindow हमेशा मौजूद नहीं हो सकते हैं

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


27
यूआरएल हमेशा अपरिभाषित क्यों है?
एनएनएम

2
यदि url अपरिभाषित है, तो अपने एक्सटेंशन को क्रोम से पुनः लोड करने का प्रयास करें: // एक्सटेंशन यह एक्सटेंशन के कॉन्फ़िगरेशन को फिर से लोड करेगा और नए जोड़े गए "टैब" की अनुमति देगा।
Flashbackzoo

2
url अपरिभाषित है क्योंकि stackoverflow.com/questions/28786723/… (उत्तर: अपने देव टूल विंडो को बंद करें या lastFocusedWindow के बजाय currentWindow में बदलें)
kspearrin

2
जब मेरे देव उपकरण विंडो को अनडॉक किया गया तो मैं अपरिभाषित हो गया। डॉकिंग ने इसे अपरिभाषित मुद्दा तय किया।
13

यह कॉल करने के लिए चर url वापस नहीं करता है। मैं एक साधारण फ़ंक्शन url चाहूँगा = GetCurrentTabUrl () जो कॉलर को वर्तमान टैब url लौटाता है। यहां चर कॉलबैक फ़ंक्शन के अंदर है। मैं इसे किसी अन्य फ़ंक्शन में पास कर सकता हूं लेकिन यह कोड संरचना को akward बनाता है। मैं वैश्विक चर का उपयोग करने से भी बचना चाहूंगा। किसी भी विचार @thauburger?
थिएरी डलोन

77

चेतावनी! chrome.tabs.getSelectedहै पदावनत । कृपया chrome.tabs.queryअन्य उत्तरों में दिखाए अनुसार उपयोग करें ।


सबसे पहले, आपको API के लिए अनुमतियों को मेनिफ़ेस्ट में सेट करना होगा। json:

"permissions": [
    "tabs"
]

और URL स्टोर करने के लिए:

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

1
इसका कारण सिर्फ पॉपअप (पृष्ठ कार्रवाई, ब्राउज़र कार्रवाई) के लिए है क्योंकि आपका पहला पैरामीटर में एक "अशक्त" भेज रहा है। कोड । आपको वर्तमान टैब आपके देखने के लिए मिल जाएगा जो अपरिभाषित है, क्रमशः विकल्प।
मोहम्मद मंसूर

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

यह बात मेरे लिए काम नहीं कर रही है, chrome.tabs.getSelectedअपरिभाषित है, क्या मैं इसे एक अलग प्रश्न में पूछता हूं?
मुस्तफा शाहवेर्दी

11
chrome.tabs.getSelectedविधि पदावनत किया गया है, सही विधि पर सूचीबद्ध है इस सवाल का जवाब नीचे इस
रॉब डब्ल्यू

1
और, सभी खुले टैब के लिंक कैसे प्राप्त करें
एनवे

48

अन्य उत्तर मान लेते हैं कि आप इसे पॉपअप या बैकग्राउंड स्क्रिप्ट से जानना चाहते हैं।

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

window.location.toString()

आप window.locationहोस्ट, प्रोटोकॉल या पथ जैसे URL के अलग-अलग हिस्सों तक पहुंचने के लिए गुणों का उपयोग कर सकते हैं ।


1
बहुत बढ़िया जवाब। सब मैं देखना चाहता था window.location.hostकि क्या Im "stackoverflow.com" पर है या नहीं।
साल्यंगोज

1
यह वास्तव में मैं क्या देख रहा था। मैं एक्सटेंशन मैकेनिक्स में इतना फंस गया था कि मैं भूल गया था कि आप बस विंडो का URL window.location.href के साथ ले सकते हैं।
felwithe

इसके लिए match:"<all_urls>"content_script सेक्शन पर स्थिति की आवश्यकता होती है और Chrome को reccomend <all_urls> नहीं किया जाता है।
14

@ तख्तकफ़ा नहीं, ऐसा नहीं है। यह मानता है कि एक सामग्री स्क्रिप्ट पहले से ही चल रही है (जैसा कि उस पृष्ठ या सक्रियटैब के लिए होस्ट की अनुमति के माध्यम से हो)।
Xan

यह सुनिश्चित करें कि इसे अंदर contentScript.jsन चलाएं background.js। संदेश में URL से फ़िल्टर किया गया कोई भी डेटा पास करें background.js। उदाहरण: let message = { type: "fetchVideoDate", id: getVideoId() };जहां getVideoId()निष्पादन होता है window.location.toString()। अन्यथा आपको कुछ chrome://temp_background_file.htmlडेटा मिलेगा । यह भी ध्यान दें कि कभी-कभी messageकहा जाता है request
डेविडहल्समैन

25

समस्या यह है कि chrome.tabs.getSelected अतुल्यकालिक है। नीचे दिया गया यह कोड आमतौर पर उम्मीद के मुताबिक काम नहीं करेगा। 'टैबलिंक' का मान तब भी अपरिभाषित होगा जब इसे कंसोल पर लिखा गया हो क्योंकि getSelected ने अभी तक कॉलबैक को लागू नहीं किया है जो मान को रीसेट करता है:

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

समाधान उस कोड को लपेटना है जहां आप किसी फ़ंक्शन में मान का उपयोग कर रहे हैं और जिसे getSelected द्वारा लागू किया गया है। इस तरह से आपको हमेशा एक मूल्य निर्धारित करने की गारंटी दी जाती है, क्योंकि आपके कोड को निष्पादित होने से पहले मूल्य प्रदान करने के लिए इंतजार करना होगा।

कुछ इस तरह का प्रयास करें:

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

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

कोड के लिए धन्यवाद, यह मेरे लिए काम करता है, "टैब" को मैनिफ़ेस्ट में अनुमतियों में जोड़ने की आवश्यकता है। "फ़ाइल" अनुमतियाँ ":" "टैब"]
डग मोलिनक्स


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

2
मैंने यह कोशिश की, लेकिन यह अपरिभाषित हो रहा है कि ऐसा क्यों है?
एनएनएम

1

नमस्ते यहाँ एक Google Chrome नमूना है जो वर्तमान साइट को एक मित्र को ईमेल करता है। मूल विचार यह है कि आप क्या चाहते हैं ... सबसे पहले यह पृष्ठ की सामग्री (आपके लिए इंटरसेस्टिंग नहीं) प्राप्त करता है ... बाद में इसे URL मिलता है (<- अच्छा हिस्सा)

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

यहां पाया जा सकता है: इस पृष्ठ को ईमेल करें


1

यह समाधान पहले से ही परीक्षण किया गया है।

मेनिफेस्ट.जेन्सन में एपीआई के लिए अनुमतियाँ सेट करें

"permissions": [ ...
   "tabs",
    "activeTab",
    "<all_urls>"
]

पहले लोड कॉल फ़ंक्शन पर। https://developer.chrome.com/extensions/tabs#event-onActivated

chrome.tabs.onActivated.addListener((activeInfo) => {  
  sendCurrentUrl()
})

परिवर्तन कॉल फ़ंक्शन पर। https://developer.chrome.com/extensions/tabs#event-onSelectionChanged

chrome.tabs.onSelectionChanged.addListener(() => {
  sendCurrentUrl()
})

URL प्राप्त करने के लिए फ़ंक्शन

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

0

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

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

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


-2

आपको इस पर जांच करनी होगी ।

एचटीएमएल

<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);

सक्रिय विंडो पर URL सहेजने के लिए मेरा क्रोम एक्सटेंशन chrome.google.com/webstore/detail/tabstore-plugin/…
Kanagavelu Sugumar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.