我想用文本创建(chrome)通知,我可以点击发送通知的页面的通知。这是我得到的最接近的,并且注意到它非常非惯用。我不得不使用js*
(js star),我找不到文档,但它只是执行一串javascript。
(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();
};")
请注意,log
有效,close
有效,但window.focus()
没有。如果您将此代码的js部分复制并浏览到浏览器的控制台,则 可以正常工作。
我认为正确的答案看起来应该更像以下内容,但onclick
对任何函数都不起作用:
(new js/Notification "Here is the title"
(clj->js {:body "(click to vist page)"
:onclick #(.focus js/window)}))
编辑:如果您输入以下内容(例如,在图中),js/window
肯定有一个focus
参数。很明显,但我刚刚检查过,但是当用(.focus js/window)
调用时它不起作用:
(.keys js/Object js/window)
这甚至无法集中注意力:
(js* "window.focus()")
我似乎无法找到js/Notification
附加任何密钥以使onclick
正常工作:
(.keys js/Object (new js/Notification "hi" (clj->js {:body "body text"})))
我一定是做错了什么,但是什么?
答案 0 :(得分:2)
这是一个"直接端口"您原来的JavaScript代码:
(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)))))
注意我使用js-
作为前缀的JavaScript引用,这是在ClojureScript中处理JavaScript互操作时的常见惯例。