NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name No native notifications // @namespace http://tampermonkey.net/ // @version 1.0 // @description Converts native notifications into html ones, so they show up inside the site that created them instead of the desktop // @author DecentM // @include /^https?\:\/\/.*/ // @grant none // ==/UserScript== window.returnFileExtension = function (string) { // This function returns the file extension of the passed string var re = /(?:\.([^.]+))?$/; return re.exec(string); // The returned object's [0] will be including the dot, [1] won't }; window.loadExternalMedia = function (url) { return new Promise(function (fulfill, reject) { // Construct link in memory var file, domElement; switch(window.returnFileExtension(url)[1]) { case "css": domElement = document.getElementsByTagName('head')[0]; file = document.createElement('link'); file.type = "text/css"; file.rel = "stylesheet"; file.href = url; break; case "js": domElement = document.getElementsByTagName('body')[0]; file = document.createElement('script'); file.type = "text/javascript"; file.src = url; file.async = true; break; default: reject(url + ": Refusing to load non css or js file"); } // Assign success and fail responses for the promise file.onload = function () { fulfill(url); }; file.onerror = function () { reject(url); }; domElement.appendChild(file); }); }; window.loadMediaArray = function (array, callback) { if (typeof array === "undefined") { throw new Error("Nothing to load"); } var i; var count; if (array.length > 0) { count = array.length; } else { return; } if (array.length !== 0) { for (i = 0; i < count; i++) { console.log("Pushing " + array[i] + " into promise"); array.push(loadExternalMedia(array[i])); if (i > 1000) { throw new Error("Iteration exceeded " + i); } } } else { throw new Error("Array size is " + array.length); } Promise.all(array) .then(function () { if (typeof callback === "function") { callback(); }} ) .catch(function (error) { throw new Error("Promise error: " + error); }); }; window.replaceNotifications = function () { 'use strict'; console.log("Replacing window.Notification"); window.oNotification = window.Notification; window.Notification = function () { console.log("Coverting notification:"); console.log(arguments[0] + '\n' + '=----------------------------=' + '\n' + arguments[1].body); notyfy({ text: arguments[1].body, layout: 'bottomRight', template: '<div class="notyfy_message"><h3 style="margin: 0; margin-top: 10px; margin-bottom: 10px">' + arguments[0] + '</h3><span class="notyfy_text"></span><div class="notyfy_close"></div></div>' }); /*return new window.oNotification(arguments[0], arguments[1]);*/ //remove the comment tags if you want to show the notification }; window.Notification.requestPermission = window.oNotification.requestPermission; window.oNotification = null; }; window.loadMediaArray([ "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js" ], function () { window.loadMediaArray ([ "http://craga89.github.io/notyfy/notyfy/jquery.notyfy.css", "http://craga89.github.io/notyfy/notyfy/themes/default.css", "http://craga89.github.io/notyfy/notyfy/jquery.notyfy.js" ], function () { window.replaceNotifications(); }); });