用户脚本通知可以在Chrome上运行,但不能在Firefox上运行?

圣狼

我有一个用户脚本,如果目标页面上存在某些内容,则会弹出通知。

在Tampermonkey / Chrome下,这不是问题。我可以使用该GM_Notification()函数轻松创建通知。

当我尝试在Firefox下执行此操作时,它没有任何相同的行为。
检查日志中没有关于该功能的错误,也没有弹出任何通知。

以下是一些示例代码,这些示例代码在Firefox + Greasemonkey或Firefox + Tampermonkey中无效,但在Chrome + Tampermonkey中有效:

// ==UserScript==
// @name        Test Notifier
// @include     *
// @grant       GM_notification
// @grant       window.focus
// ==/UserScript==

console.log('I am a pretty test script');

var notificationDetails = {
    text: 'THIS IS A TEST NOTIFICATION!!!',
    title: 'TEST',
    timeout: 15000,
    onclick: function() { window.focus(); },
  };
GM_notification(notificationDetails);

这是Firefox的标准行为吗?是否以完全不同的方式处理HTML5通知(如果有的话)?在Firefox用户脚本中启用通知的常见做法是什么?

布罗克·亚当斯(Brock Adams)

GM_notification()Greasemonkey(Firefox)尚不支持如果检查了错误控制台,您将看到此错误:

GM_notification未定义

一个旧功能请求要添加GM_notification()到Greasemonkey中。您可以去那里,并敦促通用汽车首席开发人员尝试赶上Tampermonkey。:)

在添加该功能之前,您可以使用许多现代浏览器支持的HTML5(ish)Notifications API来“增加”对GM_notification的支持。

您的测试脚本(添加了垫片)如下所示。在Firefox和Chrome上都经过测试,但可以在Safari和Opera上运行:

// ==UserScript==
// @name        _Cross browser notifications
// @match       http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant       GM_notification
// @grant       window.focus
// ==/UserScript==

console.log ('Test script start.');

shim_GM_notification ()

var notificationDetails = {
    text:       'Test notification body.',
    title:      'Test notice title',
    timeout:    6000,
    onclick:    function () {
        console.log ("Notice clicked.");
        window.focus ();
    }
  };
GM_notification (notificationDetails);

/*--- Cross-browser Shim code follows:
*/
function shim_GM_notification () {
    if (typeof GM_notification === "function") {
        return;
    }
    window.GM_notification = function (ntcOptions) {
        checkPermission ();

        function checkPermission () {
            if (Notification.permission === "granted") {
                fireNotice ();
            }
            else if (Notification.permission === "denied") {
                alert ("User has denied notifications for this page/site!");
                return;
            }
            else {
                Notification.requestPermission ( function (permission) {
                    console.log ("New permission: ", permission);
                    checkPermission ();
                } );
            }
        }

        function fireNotice () {
            if ( ! ntcOptions.title) {
                console.log ("Title is required for notification");
                return;
            }
            if (ntcOptions.text  &&  ! ntcOptions.body) {
                ntcOptions.body = ntcOptions.text;
            }
            var ntfctn  = new Notification (ntcOptions.title, ntcOptions);

            if (ntcOptions.onclick) {
                ntfctn.onclick = ntcOptions.onclick;
            }
            if (ntcOptions.timeout) {
                setTimeout ( function() {
                    ntfctn.close ();
                }, ntcOptions.timeout);
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

网站可以在Chrome上运行,但不能在Firefox上运行吗?

来自分类Dev

拖放可以在IE上正常运行,但不能在Chrome / Firefox中运行

来自分类Dev

HTML5动画可在Chrome上运行,但不能在Firefox上运行

来自分类Dev

转换比例可在Chrome上运行,但不能在Firefox上运行

来自分类Dev

HTML5动画可在Chrome上运行,但不能在Firefox上运行

来自分类Dev

mediaElement可在Chrome上运行,但不能在Firefox或Edge上运行(网络音频api / angularJS)

来自分类Dev

媒体查询可在移动Firefox上运行,但不能在移动Chrome上运行

来自分类Dev

JavaScript警报可以在Firefox上正常运行,但不能在Chrome和资源管理器中运行

来自分类Dev

Flexbox可以在Firefox上运行,但不能在Edge上运行吗?

来自分类Dev

Flexbox可以在Firefox上运行,但不能在Edge上运行吗?

来自分类Dev

Flexbox可以在Firefox上运行,但不能在Edge上运行吗?

来自分类Dev

脚本可以在CentOS上正常运行,但不能在RHEL5上运行

来自分类Dev

更改某些值后,iframe可以在chrome上运行,但不能在mozilla上运行

来自分类Dev

WebDriver可以在Chrome上运行,但不能在Internet Explorer上运行

来自分类Dev

更改某些值后,iframe可以在chrome上运行,但不能在mozilla上运行

来自分类Dev

为什么带有flex的HTML圣杯可以在Chrome上运行,而不能在Firefox上运行?

来自分类Dev

脚本可以在实时服务器上正常运行,但不能在wamp上

来自分类Dev

Worker可在Firefox和旧版Chrome上运行,但不能在最新版的Chrome上运行

来自分类Dev

使用Bootstrap,CSS打印媒体规则可在Chrome上运行,但不能在Firefox上运行

来自分类Dev

用户脚本可在Chrome上的Tampermonkey中工作,但不能在Firefox上的Greasemonkey中工作

来自分类Dev

为什么jQuery脚本可以在本地主机上运行但不能在Web服务器上运行?

来自分类Dev

CSS动画可在Chrome上运行,但不能在Safari上运行

来自分类Dev

CSS动画可在Chrome上运行,但不能在Safari上运行

来自分类Dev

Bootstrap 3媒体查询可在Chrome上运行,但不能在移动设备上运行

来自分类Dev

视频可以在Chrome中运行,但不能在Firefox中运行

来自分类Dev

CMake可以在Mac上运行,但不能在Linux上运行?

来自分类Dev

为什么sudo可以在Linux上运行但不能在Android上运行?

来自分类Dev

测试的顺序可以在python 2上完美运行,但不能在python 3上完美运行

来自分类Dev

jQuery代码可以在localhost上正常运行,但不能在服务器上运行

Related 相关文章

  1. 1

    网站可以在Chrome上运行,但不能在Firefox上运行吗?

  2. 2

    拖放可以在IE上正常运行,但不能在Chrome / Firefox中运行

  3. 3

    HTML5动画可在Chrome上运行,但不能在Firefox上运行

  4. 4

    转换比例可在Chrome上运行,但不能在Firefox上运行

  5. 5

    HTML5动画可在Chrome上运行,但不能在Firefox上运行

  6. 6

    mediaElement可在Chrome上运行,但不能在Firefox或Edge上运行(网络音频api / angularJS)

  7. 7

    媒体查询可在移动Firefox上运行,但不能在移动Chrome上运行

  8. 8

    JavaScript警报可以在Firefox上正常运行,但不能在Chrome和资源管理器中运行

  9. 9

    Flexbox可以在Firefox上运行,但不能在Edge上运行吗?

  10. 10

    Flexbox可以在Firefox上运行,但不能在Edge上运行吗?

  11. 11

    Flexbox可以在Firefox上运行,但不能在Edge上运行吗?

  12. 12

    脚本可以在CentOS上正常运行,但不能在RHEL5上运行

  13. 13

    更改某些值后,iframe可以在chrome上运行,但不能在mozilla上运行

  14. 14

    WebDriver可以在Chrome上运行,但不能在Internet Explorer上运行

  15. 15

    更改某些值后,iframe可以在chrome上运行,但不能在mozilla上运行

  16. 16

    为什么带有flex的HTML圣杯可以在Chrome上运行,而不能在Firefox上运行?

  17. 17

    脚本可以在实时服务器上正常运行,但不能在wamp上

  18. 18

    Worker可在Firefox和旧版Chrome上运行,但不能在最新版的Chrome上运行

  19. 19

    使用Bootstrap,CSS打印媒体规则可在Chrome上运行,但不能在Firefox上运行

  20. 20

    用户脚本可在Chrome上的Tampermonkey中工作,但不能在Firefox上的Greasemonkey中工作

  21. 21

    为什么jQuery脚本可以在本地主机上运行但不能在Web服务器上运行?

  22. 22

    CSS动画可在Chrome上运行,但不能在Safari上运行

  23. 23

    CSS动画可在Chrome上运行,但不能在Safari上运行

  24. 24

    Bootstrap 3媒体查询可在Chrome上运行,但不能在移动设备上运行

  25. 25

    视频可以在Chrome中运行,但不能在Firefox中运行

  26. 26

    CMake可以在Mac上运行,但不能在Linux上运行?

  27. 27

    为什么sudo可以在Linux上运行但不能在Android上运行?

  28. 28

    测试的顺序可以在python 2上完美运行,但不能在python 3上完美运行

  29. 29

    jQuery代码可以在localhost上正常运行,但不能在服务器上运行

热门标签

归档