سؤال

أريد إنشاء ملحق يعيد توجيه المستخدم إلى موقع ويب آخر إذا نقر على زر التمديد. حتى الآن، لم أر امتدادات فقط والتي تنشئ علامة تبويب جديدة لكل نقرة.

هل من الممكن إعادة توجيه المستخدم إلى موقع ويب آخر باستخدام علامة التبويب نشطة؟

حاولت شيئا مثل هذا:

chrome.browserAction.onClicked.addListener(function(tab) {
    var url = "https://www.mipanga.com/Content/Submit?url="
        + encodeURIComponent(tab.url)
        + "&title=" + encodeURIComponent(tab.title);

    document.location.href = url; // <-- this does not work
});
هل كانت مفيدة؟

المحلول

انتباه: إذا قمت بتطوير ملحقات متصفح عبر (آمل أن تفعل!)، أوصي بأن تستخدم chrome.tabs.query(). وبعد يرجى الاطلاع إجابة جان مارك آمون للمزيد من المعلومات. هذه الإجابة لا تزال تعمل في كل من فايرفوكس والكروم، ولكن query() يستخدم أكثر شيوعا، لديه المزيد من الخيارات، ويعمل في صفحات الخلفية والتآراض المنبثقة.

من chrome.tabs API، يمكنك استخدام getCurrent() أو query().

أنا أفضل getCurrent ولكن لا يمكن استدعاء من سياق غير TAB (مثل صفحة خلفية أو عرض منبثق). إذا كانت هذه مشكلة بالنسبة لك، يجب أن تتطلع إلى الاستخدام query في حين أن. جان مارك آمون إجابه فيما يلي يوفر مثالا رائعا على كيفية الحصول على علامة التبويب النشطة في هذه الحالة (لا تنس التصوير في الرسوم!).

بمجرد أن يكون لديك علامة التبويب الحالية، ما عليك سوى تمرير update().

chrome.tabs.getCurrent(function (tab) {
  //Your code below...
  var tabUrl = encodeURIComponent(tab.url);
  var tabTitle = encodeURIComponent(tab.title);
  var myNewUrl = "https://www.mipanga.com/Content/Submit?url=" + tabUrl + "&title=" + tabTitle;

  //Update the url here.
  chrome.tabs.update(tab.id, {url: myNewUrl});
});

ملحوظة: من أجل استخدام هذه الوظيفة، أنت يجب تأكد من أن لديك tabs تمكين الإذن في manifest.json ملف:

"permissions": [
  "tabs"
],

نصائح أخرى

يمكنك استخدام Chrome.tab.query أيضا

chrome.tabs.query({currentWindow: true, active: true}, function (tab) {
      chrome.tabs.update(tab.id, {url: your_new_url});
});

ال chrome.tabs.update الطريقة (على الأقل، اعتبارا من يناير 2017) سوف تعمل تلقائيا على علامة التبويب النشطة الحالية إذا لم يتم تمرير معرف علامة التبويب.

هذا لديه ميزة إضافية من عدم مطالبة tabs إذن. تحذير الامتدادات مع هذا الإذن المستخدم الذي يمكنهم قراءة سجل التصفح، لذلك يجب عليك تجنب طلب ذلك إذا لم تكن بحاجة إلى ذلك.

تغيير عنوان URL لتغيير علامة التبويب الحالية بسيطة مثل كتابة هذا:

chrome.tabs.update(undefined, {url: 'http://example.com'});

أو كما ذكرها Farwayer في التعليقات، لا تحتاج إلى وضع حججتين على الإطلاق.

chrome.tabs.update({url: 'http://example.com'});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top