كيف يمكنني الحصول على عنوان URL في علامة التبويب الحالية من امتداد Google Chrome؟

StackOverflow https://stackoverflow.com/questions/1979583

سؤال

أنا أستمتع بامتداد Google Chrome ، وأريد فقط أن أعرف كيف يمكنني تخزين عنوان URL لعلامة التبويب الحالية في متغير؟

هل كانت مفيدة؟

المحلول

تحديث: ال chrome.tabs.getSelected() تم إهمال الطريقة الآن.

الطريقة الموصى بها للحصول على عنوان URL في علامة التبويب الحالية هي الاستخدام chrome.tabs.query().

استخدام مثال:

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

هذا يتطلب أن تطلب الوصول إلى chrome.tabs API في الخاص بك بيان التمديد:

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

من المهم أن نلاحظ أن تعريف "علامة التبويب الحالية" قد يختلف حسب احتياجات امتدادك.

ضبط lastFocusedWindow: true في الاستعلام مناسب عندما تريد الوصول إلى علامة التبويب الحالية في النافذة المركزة للمستخدم (عادةً ما تكون النافذة الأعلى).

ضبط currentWindow: true يتيح لك الحصول على علامة التبويب الحالية في النافذة حيث يتم تنفيذ رمز الامتداد حاليًا. على سبيل المثال ، قد يكون هذا مفيدًا إذا قام امتدادك بإنشاء نافذة / نافذة جديدة (تغيير التركيز) ، ولكن لا يزال يريد الوصول إلى معلومات علامة التبويب من النافذة حيث تم تشغيل الامتداد.

اخترت الاستخدام lastFocusedWindow: true في هذا المثال ، لأن Google تدعو الحالات التي currentWindow قد لا تكون موجودة دائمًا.

أنت حر في تحسين استعلام علامة التبويب الخاصة بك باستخدام أي من الخصائص المحددة هنا: chrome.tabs.query

نصائح أخرى

صديق يجيب على سؤالي.

أولاً ، يمكنك تعيين أذونات API Tab:

"permissions": [
    "tabs"
]

وتخزين عنوان URL:

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

تفترض إجابات أخرى أنك تريد أن تعرفها من نافذة منبثقة أو نصي خلفية.

في حال كنت تريد معرفة عنوان URL الحالي من نص محتوى, ، تنطبق طريقة JS القياسية:

window.location.toString()

يمكنك استخدام خصائص window.location للوصول إلى الأجزاء الفردية من عنوان URL ، مثل المضيف أو البروتوكول أو المسار.

المشكلة هي أن chrome.tabs.getselected غير متزامن. هذا الرمز أدناه لن يعمل بشكل عام كما هو متوقع. ستظل قيمة "Tablink" غير محددة عند كتابتها إلى وحدة التحكم لأن 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);
}

مرحبًا ، هناك عينة من Google Chrome تقوم بإرسال بريد إلكتروني إلى الموقع الحالي إلى صديق. الفكرة الأساسية وراءها هي ما تريده ... أولاً وقبل كل شيء ، يجلب محتوى الصفحة (وليس intersing لك) ... بعد ذلك يحصل على عنوان URL (<- جزء جيد)

بالإضافة إلى ذلك ، يعد مثالًا رائعًا لعملية رمز العمل ، وهو ما أفضله على القراءة على المستندات.

يمكن العثور عليها هنا:البريد الإلكتروني هذه الصفحة

لأولئك الذين يستخدمون context menu api, ، لم يتم توضيح المستندات على الفور حول كيفية الحصول على معلومات علامة التبويب.

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

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

عليك التحقق هذه.

لغة البرمجة

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

manceest.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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top