2011-01-12 13 views
7

Próbuję utworzyć rozszerzenie Chrome, które pojawia się jako ikona na pasku adresu, które po kliknięciu ustawia contenteditable = true na wszystkich elementach strony, a następnie po kliknięciu ponownie ustawia je z powrotem na contenteditable = false.Jak wyświetlić ikonę strony rozszerzenia rozszerzenia Chrome na pasku adresu?

Upadam jednak na pierwszą przeszkodę ... Ikona nie wyświetla się nawet na pasku adresu.

Oto mój plik manifestu:

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

i oto skrypt caret.js:

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

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

}); 

To moja pierwsza próba rozszerzenia, więc to całkiem prawdopodobnie błędem początkujących, ale Naprawdę doceniam każdą pomoc lub radę!

+0

To nie jest możliwe ze względu na zmiany w Chrome. Odpowiedź Ropstah powinna być oznaczona jako poprawna. –

Odpowiedz

16

Ok, okazuje się, że muszę użyć chrome.pageAction.show(tab.id);, co oznaczało, że muszę uzyskać identyfikator bieżącej karcie, która jest uzyskiwana z:

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

    chrome.pageAction.show(tab.id); 


}); 

BUT okazuje się, że nie można używać chrome.tabs w skrypcie treści, więc musiałem zmienić na stronę w tle.

+0

Na przykład można dodać ten plik JSON do pliku manifestu. "tło": { "skrypty": [ "my_background_script.js"] } Następnie umieścić JavaScript, który wyświetla ikonę strony w my_background_script.js. – devdanke

+0

Istnieje również doskonała odpowiedź: http://stackoverflow.com/a/12574427/1030960 – Anto

+1

@ Chr. Armstrong nie mogłem uzyskać ikony akcji na stronie, nawet po tej odpowiedzi :( –

3

My answer to this other question daje rozwiązanie. FYI, drugi problem z kodem zanotowany w tej odpowiedzi dotyczy również twojego kodu: chcesz, aby ikona pojawiała się na wszystkich stronach, więc powinieneś używać wyszukiwarki, a nie strony. Albo zadziała, ale użycie akcji strony na każdej stronie jest sprzeczne z konwencją i powoduje mniej spójne wrażenia użytkownika końcowego.

0

Zrobiłem to:

chrome.tabs.onUpdated.addListener(function(id, info, tab){ 
    if (tab.url.toLowerCase().indexOf("contratado.me") > -1){ 
    chrome.pageAction.show(tab.id); 
    } 
}); 
1

miałem podobny problem, tutaj są kroki Śledziłem go rozwiązać:

I zmieniany mój manifest.json aby zaliczyć:

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

Następnie wstawiłem następujący kod do skryptu tła:

// 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() ] 
      } 
     ]); 
     }); 
    }); 

Dokumentacja na ten temat można znaleźć tutaj ... https://developer.chrome.com/extensions/declarativeContent

Powiązane problemy