Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // common --------------------------------------------------------------------
- const MenuItem = {
- 'MENU_OPEN_SELECTED_LINKS': 'menu.openSelectedLinks'
- };
- const Request = {
- 'REQUEST_GET_SELECTED_LINKS': 'request.getSelectedLinks',
- 'REQUEST_OPEN_LINKS_IN_NEW_TAB': 'request.openLinksInNewTab'
- };
- // background ----------------------------------------------------------------
- class TabManager {
- // ⑤URLを指定して新しいタブを開く
- static async openNewUrls(urls) {
- for (const url of urls) {
- await browser.tabs.create({
- 'active': false,
- 'url': url
- });
- }
- }
- }
- // ①コンテキストメニュー生成
- browser.menus.create({
- 'id': MenuItem.MENU_OPEN_SELECTED_LINKS,
- 'type': 'normal',
- 'contexts': ['selection'],
- 'title': "選択範囲のリンクを新しいタブで開く"
- });
- // ②コンテキストメニュー項目クリックイベントハンドラ
- browser.menus.onClicked.addListener((info, tab) => {
- switch (info.menuItemId) {
- case MenuItem.MENU_OPEN_SELECTED_LINKS:
- // content(タブ)に選択範囲のリンクを取得させる
- browser.tabs.sendMessage(tab.id, {
- 'type': 'request',
- 'subtype': Request.REQUEST_GET_SELECTED_LINKS,
- 'param': null
- });
- break;
- }
- });
- // ④メッセージ受信イベントハンドラ
- browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
- if (request.type === 'request') {
- if (request.subtype === Request.REQUEST_OPEN_LINKS_IN_NEW_TAB) {
- // URLをタブを開く
- TabManager.openNewUrls(request.param.urls);
- }
- return;
- }
- });
- // content -------------------------------------------------------------------
- // ③メッセージ受信イベントハンドラ
- browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
- if (request.type === 'request') {
- if (request.subtype === Request.REQUEST_GET_SELECTED_LINKS) {
- // 選択範囲のリンクからURLを収集
- const urls = [];
- const sel = window.getSelection();
- for (let i=0; i<sel.rangeCount; i++) {
- sel.getRangeAt(i).cloneContents().querySelectorAll('a').forEach(node => {
- urls.push(node.href);
- });
- }
- // URLがあった場合はbackgroundにタブを開かせる
- if (urls.length !== 0) {
- browser.runtime.sendMessage({
- 'type': 'request',
- 'subtype': Request.REQUEST_OPEN_LINKS_IN_NEW_TAB,
- 'param': {
- 'urls': urls
- }
- });
- }
- }
- return;
- }
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement