Как заставить значок Chrome Extension PageAction появляться в адресной строке? - PullRequest
8 голосов
/ 13 января 2011

Я пытаюсь создать расширение Chrome, которое отображается в виде значка в адресной строке, которое при нажатии устанавливает contenteditable = true для всех элементов на странице, а затем при повторном нажатии устанавливает их обратно в contenteditable = false.

Однако я падаю на первое препятствие ... Значок даже не отображается в адресной строке.

Вот мой файл манифеста:

 {
  "name": "Caret",
  "version": "1.0",
  "description": "Allows you to edit the content on any webpage",
  "page_action": {
    "default_icon": "icon.png"
  },
  "content_scripts": [
    {
      "matches": ["http://*/*"],
      "js": ["jquery.js", "caret.js"]
    }
  ],
  "permissions" : [
    "tabs"
  ]
}

и вот скрипт caret.js:

    chrome.browserAction.onClicked.addListener(function(Tab) {

    $("*").attr("contenteditable",true);

}); 

Это моя первая попытка продления, так что вполне вероятно, что это ошибка новичка, но я бы очень признателен за любую помощь или совет!

Ответы [ 5 ]

16 голосов
/ 13 января 2011

Хорошо, оказалось, что мне нужно было использовать chrome.pageAction.show(tab.id);, что означало, что мне нужно получить идентификатор текущей вкладки, что достигается с помощью:

chrome.tabs.getSelected(null, function(tab) {

    chrome.pageAction.show(tab.id);


});

НО itОказывается, вы не можете использовать chrome.tabs в скрипте контента, поэтому мне пришлось переключиться на использование фоновой страницы.

3 голосов
/ 25 сентября 2012

Мой ответ на этот другой вопрос дает решение. К вашему сведению, вторая проблема с кодом, отмеченная в этом ответе, также относится к вашему коду: вы хотите, чтобы значок отображался для всех страниц, поэтому вам следует использовать browser_action, а не page_action. Любой из них будет работать, но использование действия страницы на каждой странице идет вразрез с соглашением и делает его менее последовательным для конечного пользователя.

1 голос
/ 06 декабря 2015

У меня была похожая проблема, вот шаги, которые я предпринял для ее решения:

Я изменил свой manifest.json, добавив следующее:

{
  "background": {  
    "scripts": ["background.js"],  
    "persistent":false  
  },  
  "page_action": {  
    "default_icon": "logo.png",  
    "default_title": "onhover title",  
    "default_popup": "popup.html"  
  }   
}

Затем я вставил следующий код в фоновый скрипт:

// When the extension is installed or upgraded ...
    chrome.runtime.onInstalled.addListener(function() {
      // Replace all rules ...
      chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
        // With a new rule ...
        chrome.declarativeContent.onPageChanged.addRules([
          {
            // That fires when on website and has class
            conditions: [
              new chrome.declarativeContent.PageStateMatcher({
                pageUrl: { hostContains: 'myurl', schemes: ['https', 'http'] },
                css: [".cssClass"]
              })
            ],
            // And shows the extension's page action.
            actions: [ new chrome.declarativeContent.ShowPageAction() ]
          }
        ]);
      });
    });

Документацию по этому вопросу можно найти здесь ... https://developer.chrome.com/extensions/declarativeContent

0 голосов
/ 19 августа 2015

Я сделал это:

chrome.tabs.onUpdated.addListener(function(id, info, tab){
  if (tab.url.toLowerCase().indexOf("contratado.me") > -1){
    chrome.pageAction.show(tab.id);
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...