গুগল ক্রোম এক্সটেনশান থেকে কীভাবে আমি বর্তমান ট্যাবের URL পেতে পারি?


187

আমি গুগল ক্রোম এক্সটেনশনের সাথে মজা করছি, এবং আমি কেবল জানতে চাই যে কীভাবে আমি বর্তমান ট্যাবের URL টি একটি ভেরিয়েবলের মধ্যে সঞ্চয় করতে পারি?

উত্তর:


215

এটি ব্যবহার করুন 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আপনার এক্সটেনশান ম্যানিফেস্টে আপনি API এ অ্যাক্সেসের অনুরোধ করেছেন :

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

এটি উল্লেখ করা গুরুত্বপূর্ণ যে আপনার "বর্তমান ট্যাব" এর সংজ্ঞা আপনার এক্সটেনশনের প্রয়োজনের উপর নির্ভর করে পৃথক হতে পারে।

lastFocusedWindow: trueযখন আপনি ব্যবহারকারীর ফোকাস উইন্ডোতে (সাধারণত শীর্ষস্থানীয় উইন্ডো) বর্তমান ট্যাবটি অ্যাক্সেস করতে চান তখন ক্যোয়ারীতে সেট করা উপযুক্ত।

সেটিং currentWindow: trueআপনাকে উইন্ডোটিতে বর্তমান ট্যাবটি পেতে দেয় যেখানে আপনার এক্সটেনশনের কোডটি বর্তমানে কার্যকর করছে। উদাহরণস্বরূপ, যদি আপনার এক্সটেনশানটি একটি নতুন উইন্ডো / পপআপ (ফোকাস পরিবর্তন) তৈরি করে তবে এটি কার্যকর হতে পারে তবে এখনও উইন্ডোটি যেখানে ট্যাবলেটটি চালানো হয়েছিল তা থেকে ট্যাব তথ্য অ্যাক্সেস করতে চায়।

আমি lastFocusedWindow: trueএই উদাহরণটিতে ব্যবহার করা বেছে নিয়েছি , কারণ গুগল এমন সব ক্ষেত্রে কল দেয় যা currentWindow সর্বদা উপস্থিত নাও হতে পারে

এখানে সংজ্ঞায়িত যে কোনও বৈশিষ্ট্য ব্যবহার করে আপনি নিজের ট্যাব ক্যোয়ারীটি আরও পরিমার্জন করতে পারেন: chrome.tabs.query


27
ইউআরএল কেন সর্বদা অপরিবর্তিত?
এনএনএম

2
যদি ইউআরএল সংজ্ঞায়িত হয় তবে ক্রোম: // এক্সটেনশানগুলি থেকে আপনার এক্সটেনশানটি পুনরায় লোড করার চেষ্টা করুন এটি এক্সটেনশনের কনফিগারটিকে পুনরায় লোড করবে এবং সদ্য যুক্ত হওয়া "ট্যাবগুলি" অনুমতি প্রয়োগ করবে।
ফ্ল্যাশবজু

2
URL undefined কারণ stackoverflow.com/questions/28786723/... : (বন্ধ আপনার দেব সরঞ্জাম জানালা বা পরিবর্তন lastFocusedWindow পরিবর্তে currentWindow উত্তর)
kspearrin

2
আমার দেব সরঞ্জাম উইন্ডোটি আনকড করা অবস্থায় আমি অপরিজ্ঞাত হয়ে পড়েছিলাম। এটি ডকিংয়ের ফলে অপরিবর্তিত সমস্যা সমাধান হয়েছে।
ফিসু

এটি কলকারীকে পরিবর্তনশীল url দেয় না। আমি একটি সাধারণ ফাংশন চাই url = getCurrentTabUrl () যা বর্তমান ট্যাব url কলারে ফিরিয়ে দেয়। এখানে ভেরিয়েবল কলব্যাক ফাংশনের ভিতরে রয়েছে। আমি এটিকে অন্য ফাংশনে পাস করতে পারি তবে এটি কোড কাঠামোকে আকওয়ার করে তোলে। আমি গ্লোবাল ভেরিয়েবল ব্যবহার এড়াতে চাই। কোন ধারণা @thuburger?
থিয়েরি ডালন

77

সতর্কবাণী! chrome.tabs.getSelectedহয় অবচিতchrome.tabs.queryঅন্যান্য উত্তরে প্রদর্শিত হিসাবে ব্যবহার করুন ।


প্রথমত, আপনি ম্যানিফেস্ট.জসনে এপিআইয়ের অনুমতি নির্ধারণ করতে হবে:

"permissions": [
    "tabs"
]

এবং ইউআরএল সংরক্ষণ করতে:

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

1
পপআপের জন্য এটির কারণ (পৃষ্ঠা ক্রিয়া, ব্রাউজার ক্রিয়া) হ'ল প্রথম প্যারামিটারে আপনার "নাল" পাঠানো। কোড.google.com/chrome/extensions/tabs.html#method-getSelected দস্তাবেজগুলি জানায় যে প্রথম প্যারামিটারটি উইন্ডোআইড, আপনি যদি বিকল্পগুলি বা ব্যাকগ্রাউন্ড পৃষ্ঠায় এটি ব্যবহার করতে চান তবে আপনাকে উইন্ডো আইডি বা প্রবন্ধের মধ্যে রাখতে হবে বা আপনি যথাযথ অপশন সংজ্ঞাযুক্ত আপনার দেখার জন্য বর্তমান ট্যাবটি পাবেন।
মোহাম্মদ মনসুর

1
হ্যাঁ এটি কাজ করে তবে নিশ্চিত না কেন ক্রোম.ট্যাব.সেটলেক্টেড পদ্ধতিটি রেফারেন্স ডকুমেন্টে পাওয়া যায় না।
swimmingfisher

এই জিনিসটি আমার পক্ষে কাজ করছে chrome.tabs.getSelectedনা, অপরিজ্ঞাত, আমি কি এটি আলাদা প্রশ্নে জিজ্ঞাসা করব?
মোস্তফা শাহভের্দি

11
chrome.tabs.getSelectedপদ্ধতি অবচিত হয়েছে, সঠিক পদ্ধতি এ তালিকাভুক্ত করা হয় উত্তর নিচের এই
রব ডব্লু

1
এবং, সমস্ত উন্মুক্ত ট্যাবগুলির লিঙ্কগুলি কীভাবে পাবেন
এনভে

48

অন্যান্য উত্তরগুলি ধরে নিয়েছে যে আপনি এটি পপআপ বা ব্যাকগ্রাউন্ড স্ক্রিপ্ট থেকে জানতে চান।

আপনি যদি কোনও সামগ্রী স্ক্রিপ্ট থেকে বর্তমান ইউআরএলটি জানতে চান , মানক জেএস উপায় প্রযোজ্য:

window.location.toString()

আপনি window.locationইউআরএলটির পৃথক অংশগুলি যেমন হোস্ট, প্রোটোকল বা পাথের অ্যাক্সেসের বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন ।


1
দুর্দান্ত উত্তর। আমি কেবল window.location.host"স্ট্যাকওভারফ্লো ডটকম" এ আছি কিনা তা দেখতে চেয়েছিলাম ।
স্লানায়োজোজ

1
এটি আসলে আমি যা খুঁজছিলাম। আমি এক্সটেনশন মেকানিকগুলিতে এতটাই ধরা পড়েছিলাম যে আমি ভুলে গিয়েছিলাম যে আপনি কেবল উইন্ডো.লোকেশন.href দিয়ে পৃষ্ঠার URL টি দখল করতে পারেন।
অবিরত করুন

match:"<all_urls>"এটিতে বিষয়বস্তু_স্ক্রিপ্ট বিভাগে পরিস্থিতি প্রয়োজন এবং ক্রোম <সমস্ত_আরলস> আসে না।
ম্যাকান

@ তাহটাকফা না, তা হয় না। এটি ধরে নিয়েছে যে একটি সামগ্রী স্ক্রিপ্ট ইতিমধ্যে চলছে (এটি সেই পৃষ্ঠার হোস্ট অনুমতি বা সক্রিয় ট্যাবের মাধ্যমেই হোক)।
Xan

এই রান করতে ভুলবেন না contentScript.jsএবং এ background.js। আপনি যে বার্তাটি ইউআরএল থেকে ফিল্টার করেছেন তাতে কোনও বার্তায় পাস করুন 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);
}

কোডটির জন্য ধন্যবাদ, এটি আমার জন্য কাজ করেছে, "ট্যাবগুলি" ম্যানিফেস্টে অনুমতিগুলিতে যুক্ত করা দরকার
j জেসন


এবং, সমস্ত উন্মুক্ত ট্যাবগুলির লিঙ্কগুলি কীভাবে পাবেন
এনভে

2
আমি এটি চেষ্টা করেছিলাম তবে ইউআরএল অপরিশোধিত হ'ল কেন এটি?
এনএনএম

1

হাই এখানে একটি গুগল ক্রোম নমুনা যা বর্তমান সাইটে বন্ধুর কাছে ইমেল করে। পেছনের বেসিক ধারণাটি যা আপনি চান ... সর্বপ্রথম এটি পৃষ্ঠার সামগ্রীটি নিয়ে আসে (আপনার জন্য আন্তঃপ্রকাশ করে না) ... এরপরে এটি 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()
})

ইউআরএল পেতে ফাংশন

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"
   ]

জাভাস্ক্রিপ্ট
নীচের কোডটি সক্রিয় উইন্ডোর সমস্ত url বাটন ক্লিকের অংশ হিসাবে 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);

অ্যাক্টিভ উইন্ডোতে ইউআরএল সংরক্ষণ করার জন্য আমার ক্রোম এক্সটেনশনটি হ'ল chrome.google.com/webstore/detail/tabstore-plugin/…
কানাগাভেলু সুগুমার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.