2016-03-25 10 views
0

Ich möchte eine (chrome) Benachrichtigung mit Text erstellen, und ich kann auf die Benachrichtigung klicken, die zu der Seite weitergeleitet werden soll, die die Benachrichtigung ausgegeben hat. Hier ist die nächste, die ich bekommen habe, und bemerke, dass es sehr nicht-idiomatisch ist. Ich musste js* (js Stern) verwenden, für die ich Dokumente nicht finden kann, aber es führt gerade eine Zeichenkette von Javascript aus.Wie kann ich eine js/Notification in ClojureScript erstellen, die sich auf das Fenster konzentrieren kann?

(js* " var notification = new Notification('Here is the title', { 
    icon: 'http://path.to/my/icon.png', 
    body: 'Some body text', 
    }); 

    notification.onclick = function() { 
    console.log('hi there'); 
    this.close(); 
    window.focus(); 
    };") 

Hinweis, die log Werke, die close funktioniert, aber die window.focus() nicht. Wenn Sie den js-Teil dieses Codes in die Konsole Ihres Browsers kopieren und hinterlegen, funktioniert funktioniert.

ich glaube, die richtige Antwort wie die folgende aussehen sollte, aber die onclick überhaupt nicht arbeiten für jede Funktion:

(new js/Notification "Here is the title" 
      (clj->js {:body "(click to vist page)" 
         :onclick #(.focus js/window)})) 

EDIT: Wenn Sie in der folgenden (sagen wir geben, in figwheel), js/window hat definitiv eine focus param. Offensichtliche, aber ich gerade überprüft, aber es funktioniert nicht, wenn sie mit (.focus js/window) genannt:

(.keys js/Object js/window) 

Diese konzentrieren sich nicht selbst arbeiten:

(js* "window.focus()") 

Und ich kann nicht scheinen zu finden, jede angebracht Schlüssel zum js/Notificationonclick Funktion zu erhalten:

(.keys js/Object (new js/Notification "hi" (clj->js {:body "body text"}))) 

ich muss etwas falsch machen, aber was?

Antwort

1

Hier ist ein "straight-Port" des ursprünglichen JavaScript-Code:

(let [title "Here is the title" 
     js-opts (js-obj "icon" "http://path.to/my/icon.png" 
         "body" "Some body text") 
     js-notification (js/Notification. title js-opts)] 
    (aset js-notification "onclick" 
    (fn [] 
     (this-as js-this 
     (.log js/console "hi there") 
     (.close js-this) 
     (.focus js/window))))) 

Hinweis I mit js- JavaScript Referenzen Präfix, die eine gemeinsame Konvention ist, wenn sie mit JavaScript-Interop in ClojureScript zu tun.

+0

Süße! 'onclick' funktioniert total! Danke Danke! Hm, das '(.focus js/window)' scheint nicht zu funktionieren, irgendeine Idee, warum 'window.focus()' funktioniert (in js), aber nicht die cljs? –