2010-08-21 7 views
6

Ich versuche, einen einfachen Desktop-Benachrichtigungscode aus einem Inhaltsskript anzuzeigen, aber es scheint nicht zu funktionieren. Ich habe die Berechtigungen in der Datei maifest.json hinzugefügt. Gibt es eine Beschränkung, sie aus dem Inhaltsskript zu zeigen?Desktop-Benachrichtigungen von Inhaltsskripten

Antwort

2

Ja, Benachrichtigungen verwenden Chrome-spezifische API, und das Inhaltsskript ist nur für allgemeines JavaScript usw. gültig. Die background page ist, wo alle chromspezifischen APIs ausgeführt werden können ... Zuerst müssen Sie Ihren Hintergrund registrieren Seite in der manifest.json Datei - wie folgt aus:

"background_page": "background.html", 

auch in der Manifest-Datei, Lassen Sie die erforderlichen Berechtigungen:

"permissions": [ "notifications" ], 

Dann wird Ihr Skript im Hintergrund Seite sollte wie folgt aussehen:

<script> 
setTimeout("setNotification();",1); 
function setNotification(){ 
    var n 
    if (window.webkitNotifications.checkPermission() != 0){ 
    setNotification(); 
    return false; 
    } 
n = window.webkitNotifications.createHTMLNotification('http://www.your-notification-address.com'); 
n.show();} 
</script> 
+0

groß .. Danke David :) – sharath

+0

Wenn du die Erlaubnis legst Für Benachrichtigungen in Ihrem Erweiterungsmanifest müssen Sie nicht nach Berechtigungen suchen. http://code.google.com/chrome/extensions/notifications.html – npdoty

+1

Erklärt nicht wirklich, wie Sie eine Desktopbenachrichtigung anzeigen können, die von einem Inhaltsskript stammt. –

8

Sie können Benachrichtigungen nicht direkt über ein Inhaltsskript anzeigen. Aber Sie können zeigen sie durch die Hintergrundseite.

Sie manifest.js sollte wie folgt aussehen:

{ 
"name": "Notify This", 
"version": "0.1", 
"permissions": [ 
    "notifications" 
], 
"background_page": "background.html", 
"content_scripts": [ 
    { 
    "matches": ["http://www.example.com/*"], 
    "js": ["contentscript.js"] 
    } 
] 
} 

Dann wird die Verwendung chrome.extension.sendRequest():

// in your contentscript.js 
chrome.extension.sendRequest({msg: "Sup?"}, function(response) { // optional callback - gets response 
    console.log(response.returnMsg); 
}); 

Und am empfangenden Ende sollten Sie haben einen onRequest Zuhörer:

// in your background.html 
    chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) { 

     // Create a simple text notification: 
    var notify = webkitNotifications.createNotification(
     '48.png', // icon url - can be relative 
     'Hello!', // notification title 
     request.msg // notification body text 
    ); 

    notify.show(); 

    setTimeout(function(){ notify.cancel(); },5000); 
    sendResponse({returnMsg: "All good!"}); // optional response 
    }); 
+0

Danke, ich hatte endlich so etwas gearbeitet. Sie können auch nur Desktop-Benachrichtigungen von Inhaltsskripten zulassen. Die Leute ärgern sich über Apple wegen solcher geschlossener APIs, aber es ist nicht wie bei Google, wo das Web offener sein soll ... –

+0

Dies ist die Antwort, die ich mir erhoffte, basierend auf dem Titel der Frage. Vielen Dank! –