<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://hmoegirl.com/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Notification.js</id>
	<title>MediaWiki:Gadget-Notification.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://hmoegirl.com/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Notification.js"/>
	<link rel="alternate" type="text/html" href="https://hmoegirl.com/index.php?title=MediaWiki:Gadget-Notification.js&amp;action=history"/>
	<updated>2026-04-24T05:54:19Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>https://hmoegirl.com/index.php?title=MediaWiki:Gadget-Notification.js&amp;diff=72799&amp;oldid=prev</id>
		<title>BakeWater：​/* top */bad link repair, replaced: hmoegirl.com → hmoegirl.info</title>
		<link rel="alternate" type="text/html" href="https://hmoegirl.com/index.php?title=MediaWiki:Gadget-Notification.js&amp;diff=72799&amp;oldid=prev"/>
		<updated>2022-12-20T08:16:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;top：​&lt;/span&gt;bad link repair, replaced: hmoegirl.com → hmoegirl.info&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2022年12月20日 (二) 16:16的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;第2行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第2行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   const notificationIcon = &amp;#039;https://img.moegirl.org.cn/common/thumb/f/f6/%E8%93%9D%E8%90%8C%E5%AD%97.png/233px-%E8%93%9D%E8%90%8C%E5%AD%97.png&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   const notificationIcon = &amp;#039;https://img.moegirl.org.cn/common/thumb/f/f6/%E8%93%9D%E8%90%8C%E5%AD%97.png/233px-%E8%93%9D%E8%90%8C%E5%AD%97.png&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   const workerUrl = window.mw ?&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   const workerUrl = window.mw ?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;#039;https://www.hmoegirl.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;com&lt;/del&gt;/index.php?title=%E7%94%A8%E6%88%B7:%E6%9D%B1%E6%9D%B1%E5%90%9B/js/notification.js/worker.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;#039; :&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;#039;https://www.hmoegirl.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;info&lt;/ins&gt;/index.php?title=%E7%94%A8%E6%88%B7:%E6%9D%B1%E6%9D%B1%E5%90%9B/js/notification.js/worker.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;#039; :&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;#039;worker.js&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;#039;worker.js&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>BakeWater</name></author>
	</entry>
	<entry>
		<id>https://hmoegirl.com/index.php?title=MediaWiki:Gadget-Notification.js&amp;diff=46393&amp;oldid=prev</id>
		<title>2021年8月8日 (日) 05:12 imported&gt;=海豚=</title>
		<link rel="alternate" type="text/html" href="https://hmoegirl.com/index.php?title=MediaWiki:Gadget-Notification.js&amp;diff=46393&amp;oldid=prev"/>
		<updated>2021-08-08T05:12:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2021年8月8日 (日) 13:12的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;第2行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第2行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   const notificationIcon = &amp;#039;https://img.moegirl.org.cn/common/thumb/f/f6/%E8%93%9D%E8%90%8C%E5%AD%97.png/233px-%E8%93%9D%E8%90%8C%E5%AD%97.png&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   const notificationIcon = &amp;#039;https://img.moegirl.org.cn/common/thumb/f/f6/%E8%93%9D%E8%90%8C%E5%AD%97.png/233px-%E8%93%9D%E8%90%8C%E5%AD%97.png&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   const workerUrl = window.mw ?&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   const workerUrl = window.mw ?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;#039;/index.php?title= &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;用户&lt;/del&gt;: &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;東東君&lt;/del&gt;/js/notification.js/worker.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;#039; :&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https://www.hmoegirl.com&lt;/ins&gt;/index.php?title=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;%E7%94%A8%E6%88%B7&lt;/ins&gt;:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;%E6%9D%B1%E6%9D%B1%E5%90%9B&lt;/ins&gt;/js/notification.js/worker.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;#039; :&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;#039;worker.js&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;#039;worker.js&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>imported&gt;=海豚=</name></author>
	</entry>
	<entry>
		<id>https://hmoegirl.com/index.php?title=MediaWiki:Gadget-Notification.js&amp;diff=46392&amp;oldid=prev</id>
		<title>2021年8月7日 (六) 03:52 imported&gt;=海豚=</title>
		<link rel="alternate" type="text/html" href="https://hmoegirl.com/index.php?title=MediaWiki:Gadget-Notification.js&amp;diff=46392&amp;oldid=prev"/>
		<updated>2021-08-07T03:52:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://hmoegirl.com/index.php?title=MediaWiki:Gadget-Notification.js&amp;amp;diff=46392&amp;amp;oldid=46391&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>imported&gt;=海豚=</name></author>
	</entry>
	<entry>
		<id>https://hmoegirl.com/index.php?title=MediaWiki:Gadget-Notification.js&amp;diff=46391&amp;oldid=prev</id>
		<title>imported&gt;=海豚=：​导入1个版本</title>
		<link rel="alternate" type="text/html" href="https://hmoegirl.com/index.php?title=MediaWiki:Gadget-Notification.js&amp;diff=46391&amp;oldid=prev"/>
		<updated>2021-08-07T03:41:47Z</updated>

		<summary type="html">&lt;p&gt;导入1个版本&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2021年8月7日 (六) 11:41的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;zh&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;（没有差异）&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>imported&gt;=海豚=</name></author>
	</entry>
	<entry>
		<id>https://hmoegirl.com/index.php?title=MediaWiki:Gadget-Notification.js&amp;diff=46390&amp;oldid=prev</id>
		<title>2019年8月6日 (二) 02:06 Mediawiki&gt;夕舞八弦</title>
		<link rel="alternate" type="text/html" href="https://hmoegirl.com/index.php?title=MediaWiki:Gadget-Notification.js&amp;diff=46390&amp;oldid=prev"/>
		<updated>2019-08-06T02:06:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;$(function(){&lt;br /&gt;
    if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)){&lt;br /&gt;
        return false&lt;br /&gt;
    }&lt;br /&gt;
    var lock=setInterval(function(){&lt;br /&gt;
        if(mw.Api){&lt;br /&gt;
            clearInterval(lock);&lt;br /&gt;
            function nct(nct, url, life) {&lt;br /&gt;
                var life = life || 8000&lt;br /&gt;
                if (url) { nct.onclick = function () { open(url, &amp;#039;_blank&amp;#039;) } }&lt;br /&gt;
                nct.addEventListener(&amp;#039;click&amp;#039;, function () {&lt;br /&gt;
                    setTimeout(function () {&lt;br /&gt;
                        nct.close()&lt;br /&gt;
                    })&lt;br /&gt;
                }, 500)&lt;br /&gt;
                setTimeout(function () {&lt;br /&gt;
                    nct.close()&lt;br /&gt;
                }, life)&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function setCookie(cname, cvalue, GMTStr) {&lt;br /&gt;
                var expires = &amp;quot;expires=&amp;quot; + GMTStr;&lt;br /&gt;
                document.cookie = cname + &amp;quot;=&amp;quot; + cvalue + &amp;quot;; &amp;quot; + expires;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function getCookie(cname) {&lt;br /&gt;
                var name = cname + &amp;quot;=&amp;quot;;&lt;br /&gt;
                var ca = document.cookie.split(&amp;#039;;&amp;#039;);&lt;br /&gt;
                for (var i = 0; i &amp;lt; ca.length; i++) {&lt;br /&gt;
                    var c = ca[i].trim();&lt;br /&gt;
                    if (c.indexOf(name) == 0) return c.substring(name.length, c.length);&lt;br /&gt;
                }&lt;br /&gt;
                return &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function serviceToken(flag) {&lt;br /&gt;
                var flag = flag || false&lt;br /&gt;
                var d = new Date()&lt;br /&gt;
                if (flag) {&lt;br /&gt;
                    d.setTime(d.getTime() + (2 * 60 * 1000))&lt;br /&gt;
                    setCookie(&amp;#039;widget-notification-serviceOn&amp;#039;, &amp;#039;true&amp;#039;, d.toGMTString())&lt;br /&gt;
                } else {&lt;br /&gt;
                    d.setTime(d.getTime() - 1)&lt;br /&gt;
                    setCookie(&amp;#039;widget-notification-serviceOn&amp;#039;, &amp;#039;&amp;#039;, d.toGMTString())&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function isObjectValueEqual(a, b) {&lt;br /&gt;
                var aProps = Object.getOwnPropertyNames(a);&lt;br /&gt;
                var bProps = Object.getOwnPropertyNames(b);&lt;br /&gt;
&lt;br /&gt;
                if (aProps.length != bProps.length) {&lt;br /&gt;
                    return false;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                for (var i = 0; i &amp;lt; aProps.length; i++) {&lt;br /&gt;
                    var propName = aProps[i];&lt;br /&gt;
                    if (a[propName] !== b[propName]) {&lt;br /&gt;
                        return false;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                return true;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (typeof Notification == &amp;#039;undefined&amp;#039;) {&lt;br /&gt;
                mw.notify(&amp;#039;你的浏览器版本过低或不支持某些功能，无法使用Web Notification插件！&amp;#039;, { type: &amp;#039;warn&amp;#039; })&lt;br /&gt;
                setTimeout(function () {&lt;br /&gt;
                    mw.notify(&amp;#039;请从你的用户页移除该插件，以消除这些警告！&amp;#039;, { type: &amp;#039;warn&amp;#039; });&lt;br /&gt;
                }, 2000)&lt;br /&gt;
                return false&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (Notification.permission == &amp;#039;default&amp;#039;) {&lt;br /&gt;
                alert(&amp;#039;点击确定关闭这条消息后，将弹出授予通知权限的窗口，届时请点击“允许”，以保证插件的正常运行。&amp;#039;)&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            Notification.requestPermission(function () {&lt;br /&gt;
                var status = Notification.permission&lt;br /&gt;
                if (status == &amp;#039;granted&amp;#039;) {&lt;br /&gt;
                    if (!localStorage.getItem(&amp;#039;widget-notification-messageMark&amp;#039;)) {&lt;br /&gt;
                        localStorage.setItem(&amp;#039;widget-notification-messageMark&amp;#039;, &amp;#039;true&amp;#039;)&lt;br /&gt;
                        nct(new Notification(&amp;#039;欢迎&amp;#039;, {&lt;br /&gt;
                            body: &amp;#039;您已经成功开启通知功能，欢迎使用！&amp;#039;,&lt;br /&gt;
                            icon: &amp;#039;https://fgo.wiki/resources/assets/wiki.png&amp;#039;&lt;br /&gt;
                        }))&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if (status == &amp;#039;denied&amp;#039;) {&lt;br /&gt;
                    alert(&amp;#039;您未能正确授予通知权限，若要继续使用，请在url栏左侧点击小锁标志开启权限，若无法设置，请从你的用户页删去此插件。&amp;#039;)&lt;br /&gt;
                }&lt;br /&gt;
            })&lt;br /&gt;
&lt;br /&gt;
            var api = new mw.Api()&lt;br /&gt;
&lt;br /&gt;
            var userName = &amp;#039;&amp;#039;&lt;br /&gt;
            api.get({&lt;br /&gt;
                &amp;quot;action&amp;quot;: &amp;quot;query&amp;quot;,&lt;br /&gt;
                &amp;quot;format&amp;quot;: &amp;quot;json&amp;quot;,&lt;br /&gt;
                &amp;quot;meta&amp;quot;: &amp;quot;userinfo&amp;quot;,&lt;br /&gt;
                &amp;quot;utf8&amp;quot;: 1&lt;br /&gt;
            }).done(function (data) {&lt;br /&gt;
                userName = data.query.userinfo.name&lt;br /&gt;
            })&lt;br /&gt;
&lt;br /&gt;
            var pages = []&lt;br /&gt;
            var pagesStr = &amp;#039;&amp;#039;&lt;br /&gt;
            var apiContinue = null&lt;br /&gt;
            function getWatch() {&lt;br /&gt;
                var request = {&lt;br /&gt;
                    &amp;quot;action&amp;quot;: &amp;quot;query&amp;quot;,&lt;br /&gt;
                    &amp;quot;format&amp;quot;: &amp;quot;json&amp;quot;,&lt;br /&gt;
                    &amp;quot;list&amp;quot;: &amp;quot;watchlistraw&amp;quot;,&lt;br /&gt;
                    &amp;quot;utf8&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;wrlimit&amp;quot;: &amp;quot;max&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
                if (apiContinue) {&lt;br /&gt;
                    request.wrcontinue = apiContinue.wrcontinue&lt;br /&gt;
                    request[&amp;#039;continue&amp;#039;] = apiContinue[&amp;#039;continue&amp;#039;]&lt;br /&gt;
                } else {&lt;br /&gt;
                    delete request.wrcontinue&lt;br /&gt;
                    delete request[&amp;#039;continue&amp;#039;]&lt;br /&gt;
                }&lt;br /&gt;
                api.get(request).done(function (data) {&lt;br /&gt;
                    apiContinue = data[&amp;#039;continue&amp;#039;]&lt;br /&gt;
                    var watch = data.watchlistraw&lt;br /&gt;
                    $.each(watch, function () {&lt;br /&gt;
                        if (this.title != &amp;#039;User talk:&amp;#039; + userName) {&lt;br /&gt;
                            pages.push(this.title)&lt;br /&gt;
                        }&lt;br /&gt;
                    })&lt;br /&gt;
                    pagesStr = pages.join(&amp;#039;|&amp;#039;)&lt;br /&gt;
                    localStorage.setItem(&amp;#039;widget-notification-watchList&amp;#039;, pagesStr)&lt;br /&gt;
                    apiContinue &amp;amp;&amp;amp; getWatch()&lt;br /&gt;
                })&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (location.href == encodeURIComponent(&amp;#039;https://fgo.wiki/w/Special:编辑监视列表&amp;#039;)) {&lt;br /&gt;
                if (/已从您的监视列表移除%d{1,2}个标题/.test($(&amp;#039;#mw-content-text&amp;#039;).text())) {&lt;br /&gt;
                    pages = []&lt;br /&gt;
                    getWatch()&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function setWatch(act) {&lt;br /&gt;
                var act = act || &amp;#039;push&amp;#039;&lt;br /&gt;
                var watch = localStorage.getItem(&amp;#039;widget-notification-watchList&amp;#039;).split(&amp;#039;|&amp;#039;)&lt;br /&gt;
                var thisTitle = location.href.replace(/https\:\/\/fgo\.wiki\/w\/(.+)$/, &amp;#039;$1&amp;#039;)&lt;br /&gt;
                if (/(index\.php|action=edit)/.test(thisTitle)) {&lt;br /&gt;
                    thisTitle = thisTitle.replace(/.*title=(.+?)(&amp;amp;.+|$)/, &amp;#039;$1&amp;#039;)&lt;br /&gt;
                }&lt;br /&gt;
                thisTitle = decodeURIComponent(thisTitle)&lt;br /&gt;
                var talkTitle = &amp;#039;Talk:&amp;#039; + thisTitle&lt;br /&gt;
                var npRE = /(Template|Mooncell|模块|User|Help):(.+)/&lt;br /&gt;
                if (npRE.test(thisTitle)) {&lt;br /&gt;
                    var prefix = thisTitle.replace(npRE, &amp;#039;$1&amp;#039;)&lt;br /&gt;
                    var name = thisTitle.replace(npRE, &amp;#039;$2&amp;#039;)&lt;br /&gt;
                }&lt;br /&gt;
                if (/(Template|Mooncell|User|Help)/.test(prefix)) {&lt;br /&gt;
                    talkTitle = prefix + &amp;#039; talk:&amp;#039; + name&lt;br /&gt;
                }&lt;br /&gt;
                if (prefix == &amp;#039;模块&amp;#039;) {&lt;br /&gt;
                    talkTitle = &amp;#039;模块讨论:&amp;#039; + name&lt;br /&gt;
                }&lt;br /&gt;
                if (act == &amp;#039;push&amp;#039;) {&lt;br /&gt;
                    var flag = true&lt;br /&gt;
                    $.each(watch, function () {&lt;br /&gt;
                        if (this == thisTitle || this == talkTitle) { flag = false }&lt;br /&gt;
                    })&lt;br /&gt;
                    flag &amp;amp;&amp;amp; watch.push(thisTitle, talkTitle)&lt;br /&gt;
                }&lt;br /&gt;
                (act == &amp;#039;remove&amp;#039;) &amp;amp;&amp;amp; $.each(watch, function (i) {&lt;br /&gt;
                    if (this == thisTitle || this == talkTitle) {&lt;br /&gt;
                        watch[i] = &amp;#039;&amp;#039;&lt;br /&gt;
                    }&lt;br /&gt;
                })&lt;br /&gt;
&lt;br /&gt;
                var watchStr = watch.join(&amp;#039;|&amp;#039;)&lt;br /&gt;
                localStorage.setItem(&amp;#039;widget-notification-watchList&amp;#039;, watchStr)&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            $(&amp;#039;#ca-watch, #ca-unwatch&amp;#039;).mousedown(function () {&lt;br /&gt;
                (this.id.toLowerCase() == &amp;#039;ca-watch&amp;#039;) &amp;amp;&amp;amp; setWatch()&lt;br /&gt;
                    ; (this.id.toLowerCase() == &amp;#039;ca-unwatch&amp;#039;) &amp;amp;&amp;amp; setWatch(&amp;#039;remove&amp;#039;)&lt;br /&gt;
            })&lt;br /&gt;
            $(&amp;#039;#mw-editpage-watch&amp;#039;).mouseup(function () {&lt;br /&gt;
                $(&amp;#039;#wpWatchthis&amp;#039;).is(&amp;#039;:checked&amp;#039;) ? setWatch(&amp;#039;remove&amp;#039;) : setWatch()   // 此处获得了false为选中，true为未选中&lt;br /&gt;
            })&lt;br /&gt;
&lt;br /&gt;
            getCookie(&amp;#039;widget-notification-serviceOn&amp;#039;) != &amp;#039;true&amp;#039; &amp;amp;&amp;amp; main()&lt;br /&gt;
            var watchdogKey = setInterval(function () {&lt;br /&gt;
                if (getCookie(&amp;#039;widget-notification-serviceOn&amp;#039;) != &amp;#039;true&amp;#039;) {&lt;br /&gt;
                    main()&lt;br /&gt;
                    clearInterval(watchdogKey)&lt;br /&gt;
                }&lt;br /&gt;
            }, 5000 + Math.random())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
            function main() {&lt;br /&gt;
                console.log(&amp;#039;notification.js已开启服务，开始进行消息与监视列表的通知推送。&amp;#039;)&lt;br /&gt;
                serviceToken(true)&lt;br /&gt;
                    ; (function serviceStart() {&lt;br /&gt;
                        setTimeout(function () {&lt;br /&gt;
                            serviceToken(true)&lt;br /&gt;
                            serviceStart()&lt;br /&gt;
                        }, 60 * 1000)&lt;br /&gt;
                    })()&lt;br /&gt;
&lt;br /&gt;
                $(window).on(&amp;#039;unload&amp;#039;, function () {&lt;br /&gt;
                    serviceToken()&lt;br /&gt;
                })&lt;br /&gt;
&lt;br /&gt;
                if (!getCookie(&amp;#039;widget-notification-removeTime&amp;#039;)) {&lt;br /&gt;
                    var d = new Date()&lt;br /&gt;
                    d.setTime(d.getTime() + (24 * 60 * 60 * 1000))&lt;br /&gt;
                    setCookie(&amp;#039;widget-notification-removeTime&amp;#039;, d.toGMTString(), d.toGMTString())&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                ; (function () {&lt;br /&gt;
                    function getTimeISO8061() {&lt;br /&gt;
                        var fun = function (num) {&lt;br /&gt;
                            return num &amp;lt; 10 ? &amp;#039;0&amp;#039; + num : num&lt;br /&gt;
                        }&lt;br /&gt;
                        var time = new Date()&lt;br /&gt;
                        var y = time.getUTCFullYear(),&lt;br /&gt;
                            m = fun(time.getUTCMonth() + 1),&lt;br /&gt;
                            d = fun(time.getUTCDate()),&lt;br /&gt;
                            h = fun(time.getUTCHours()),&lt;br /&gt;
                            i = fun(time.getUTCMinutes()),&lt;br /&gt;
                            s = fun(time.getUTCSeconds())&lt;br /&gt;
                        var timeStr = y + &amp;#039;-&amp;#039; + m + &amp;#039;-&amp;#039; + d + &amp;#039;T&amp;#039; + h + &amp;#039;:&amp;#039; + i + &amp;#039;:&amp;#039; + s + &amp;#039;Z&amp;#039;&lt;br /&gt;
                        return timeStr&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    setTimeout(function () {&lt;br /&gt;
                        getWatch()&lt;br /&gt;
                        console.log(&amp;#039;notification.js:已获取监视列表&amp;#039;)&lt;br /&gt;
                    }, 30000)&lt;br /&gt;
&lt;br /&gt;
                    var lastSearchTime = getTimeISO8061()&lt;br /&gt;
                    setInterval(function () {&lt;br /&gt;
                        var usedStr = getCookie(&amp;#039;widget-notification-usedIds&amp;#039;)&lt;br /&gt;
                        if (usedStr) {&lt;br /&gt;
                            var used = usedStr.split(&amp;#039;|&amp;#039;)&lt;br /&gt;
                        } else {&lt;br /&gt;
                            var used = []&lt;br /&gt;
                        }&lt;br /&gt;
&lt;br /&gt;
                        var rcidsStr = getCookie(&amp;#039;widget-notification-rcids&amp;#039;)&lt;br /&gt;
                        if (rcidsStr) {&lt;br /&gt;
                            var rcids = rcidsStr.split(&amp;#039;|&amp;#039;)&lt;br /&gt;
                        } else {&lt;br /&gt;
                            var rcids = []&lt;br /&gt;
                        }&lt;br /&gt;
&lt;br /&gt;
                        var memoryTime = getCookie(&amp;#039;widget-notification-lastSearchTime&amp;#039;)&lt;br /&gt;
                        if (memoryTime) {&lt;br /&gt;
                            lastSearchTime = memoryTime&lt;br /&gt;
                        }&lt;br /&gt;
                        api.get({&lt;br /&gt;
                            action: &amp;#039;query&amp;#039;,&lt;br /&gt;
                            format: &amp;#039;json&amp;#039;,&lt;br /&gt;
                            prop: &amp;#039;&amp;#039;,&lt;br /&gt;
                            list: &amp;#039;recentchanges&amp;#039;,&lt;br /&gt;
                            rcend: lastSearchTime,&lt;br /&gt;
                            rclimit: &amp;#039;max&amp;#039;,&lt;br /&gt;
                            utf8: 1,&lt;br /&gt;
                            formatversion: 1,&lt;br /&gt;
                            rctoponly: 1,&lt;br /&gt;
                            rcexcludeuser: userName,&lt;br /&gt;
                            rcprop: &amp;#039;title|user|comment|ids&amp;#039;&lt;br /&gt;
                        }).done(function (data) {&lt;br /&gt;
                            var d = new Date()&lt;br /&gt;
                            d.setTime(d.getTime() + (30 * 60 * 1000))&lt;br /&gt;
                            setCookie(&amp;#039;widget-notification-lastSearchTime&amp;#039;, getTimeISO8061(), d.toGMTString())&lt;br /&gt;
                            var query = data.query.recentchanges&lt;br /&gt;
                            var filter = []&lt;br /&gt;
                            var pages = localStorage.getItem(&amp;#039;widget-notification-watchList&amp;#039;).split(&amp;#039;|&amp;#039;)&lt;br /&gt;
                            $.each(query, function () {&lt;br /&gt;
                                for (var i = 0; i &amp;lt; pages.length; i++) {&lt;br /&gt;
                                    if (this.title == pages[i]) {&lt;br /&gt;
                                        var flag = true&lt;br /&gt;
                                        for (var j = 0; j &amp;lt; filter.length; j++) {&lt;br /&gt;
                                            if (isObjectValueEqual(this, filter[j])) {&lt;br /&gt;
                                                flag = false&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                        flag &amp;amp;&amp;amp; filter.push(this)&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                            })&lt;br /&gt;
&lt;br /&gt;
                            $.each(filter, function () {&lt;br /&gt;
                                var mark = true&lt;br /&gt;
                                for (var i = 0; i &amp;lt; rcids.length; i++) {&lt;br /&gt;
                                    if (this.rcids == rcids[i]) {&lt;br /&gt;
                                        mark = false&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
&lt;br /&gt;
                                if (mark) {&lt;br /&gt;
                                    var commentStr = &amp;#039;在【&amp;#039; + this.title + &amp;#039;】作出了编辑。&amp;#039;&lt;br /&gt;
                                    if (this.comment) {&lt;br /&gt;
                                        this.comment = this.comment.replace(&amp;#039;// Edit via Wikiplus&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
                                        var chapterRE = /\/\* (.+?) \*\/([^\/]*)/&lt;br /&gt;
                                        if (chapterRE.test(this.comment)) {&lt;br /&gt;
                                            var chapter = this.comment.replace(chapterRE, &amp;#039;$1&amp;#039;)&lt;br /&gt;
                                            var comment = this.comment.replace(chapterRE, &amp;#039;$2&amp;#039;).replace(/[\s]*(.+)[\s]*/, &amp;#039;$1&amp;#039;)&lt;br /&gt;
                                            if (chapter &amp;amp;&amp;amp; (chapter != this.comment)) {&lt;br /&gt;
                                                commentStr += &amp;#039;\n章节 → &amp;#039; + chapter&lt;br /&gt;
                                            }&lt;br /&gt;
                                            if (comment &amp;amp;&amp;amp; (comment != this.comment)) {&lt;br /&gt;
                                                commentStr += &amp;#039;\n摘要：&amp;#039; + comment&lt;br /&gt;
                                            }&lt;br /&gt;
                                        } else {&lt;br /&gt;
                                            commentStr += &amp;#039;\n摘要：&amp;#039; + this.comment.replace(/[\s]*(.+)[\s]*/, &amp;#039;$1&amp;#039;)&lt;br /&gt;
                                        }&lt;br /&gt;
&lt;br /&gt;
                                    }&lt;br /&gt;
                                    nct(new Notification(this.user, {&lt;br /&gt;
                                        body: commentStr,&lt;br /&gt;
                                        icon: &amp;#039;//fgo.wiki/extensions/Avatar/avatar.php?user=&amp;#039; + this.user&lt;br /&gt;
                                    }), &amp;#039;https://fgo.wiki/index.php?title=&amp;#039; + this.title + &amp;#039;&amp;amp;curid=&amp;#039; + this.pageid + &amp;#039;&amp;amp;diff=&amp;#039; + this.revid + &amp;#039;&amp;amp;oldid=&amp;#039; + this.old_revid)&lt;br /&gt;
                                    console.log(&amp;#039;编辑者：&amp;#039; + this.user + &amp;#039;\n&amp;#039; + commentStr)&lt;br /&gt;
                                    rcids.push(this.rcid)&lt;br /&gt;
                                }&lt;br /&gt;
                                var rcidsStr = rcids.join(&amp;#039;|&amp;#039;)&lt;br /&gt;
                                setCookie(&amp;#039;widget-notification-rcids&amp;#039;, rcidsStr, getCookie(&amp;#039;widget-notification-removeTime&amp;#039;))&lt;br /&gt;
                            })&lt;br /&gt;
                        })&lt;br /&gt;
&lt;br /&gt;
                        api.get({&lt;br /&gt;
                            action: &amp;quot;query&amp;quot;,&lt;br /&gt;
                            format: &amp;quot;json&amp;quot;,&lt;br /&gt;
                            prop: &amp;quot;&amp;quot;,&lt;br /&gt;
                            meta: &amp;quot;notifications&amp;quot;,&lt;br /&gt;
                            utf8: 1,&lt;br /&gt;
                            notfilter: &amp;quot;!read&amp;quot;,&lt;br /&gt;
                            notlimit: &amp;quot;max&amp;quot;&lt;br /&gt;
                        }).done(function (data) {&lt;br /&gt;
                            var query = data.query.notifications.list&lt;br /&gt;
                            $.each(query, function () {&lt;br /&gt;
                                var msgNct = function (text, $this) {&lt;br /&gt;
                                    nct(new Notification($this.agent.name + &amp;#039;：&amp;#039;, {&lt;br /&gt;
                                        body: text,&lt;br /&gt;
                                        icon: &amp;#039;//fgo.wiki/extensions/Avatar/avatar.php?user=&amp;#039; + $this.agent.name,&lt;br /&gt;
                                        sticky: true&lt;br /&gt;
                                    }), &amp;#039;https://fgo.wiki/w/&amp;#039; + $this.title.full, 9999999999)&lt;br /&gt;
                                    console.log($this.agent.name + &amp;#039;：&amp;#039; + text)&lt;br /&gt;
                                }&lt;br /&gt;
&lt;br /&gt;
                                var mark = true&lt;br /&gt;
                                for (var i = 0; i &amp;lt; used.length; i++) {&lt;br /&gt;
                                    if (this.id == used[i]) {&lt;br /&gt;
                                        mark = false&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
&lt;br /&gt;
                                if (mark) {&lt;br /&gt;
                                    switch (this.type) {&lt;br /&gt;
                                        case &amp;#039;edit-thank&amp;#039;: {&lt;br /&gt;
                                            msgNct(&amp;#039;对您在【&amp;#039; + this.title.full + &amp;#039;】的编辑表示了感谢！&amp;#039;, this)&lt;br /&gt;
                                            break&lt;br /&gt;
                                        }&lt;br /&gt;
                                        case &amp;#039;edit-user-talk&amp;#039;: {&lt;br /&gt;
                                            msgNct(&amp;#039;在您的讨论页留言了。&amp;#039;, this)&lt;br /&gt;
                                            break&lt;br /&gt;
                                        }&lt;br /&gt;
                                        case &amp;#039;flowthread_reply&amp;#039;: {&lt;br /&gt;
                                            msgNct(&amp;#039;回复了您在【&amp;#039; + this.title.full + &amp;#039;】的评论。&amp;#039;, this)&lt;br /&gt;
                                            break&lt;br /&gt;
                                        }&lt;br /&gt;
                                        case &amp;#039;flowthread_userpage&amp;#039;: {&lt;br /&gt;
                                            msgNct(&amp;#039;在您的用户页留下了评论。&amp;#039;, this)&lt;br /&gt;
                                            break&lt;br /&gt;
                                        }&lt;br /&gt;
                                        case &amp;#039;flowthread_delete&amp;#039;: {&lt;br /&gt;
                                            nct(new Notification(&amp;#039;通知&amp;#039;, {&lt;br /&gt;
                                                body: &amp;#039;您在【&amp;#039; + this.title.full + &amp;#039;】下的评论被删除了。&amp;#039;,&lt;br /&gt;
                                                icon: &amp;#039;https://fgo.wiki/resources/assets/wiki.png&amp;#039;,&lt;br /&gt;
                                                sticky: true&lt;br /&gt;
                                            }), &amp;#039;https://fgo.wiki/w/&amp;#039; + this.title.full, 9999999999)&lt;br /&gt;
                                            console.log(&amp;#039;评论被删除：在页面【&amp;#039; + this.title.full + &amp;#039;】上&amp;#039;)&lt;br /&gt;
                                            break&lt;br /&gt;
                                        }&lt;br /&gt;
                                        case &amp;#039;mention&amp;#039;: {&lt;br /&gt;
                                            msgNct(&amp;#039;在【&amp;#039; + this.title.full + &amp;#039;】中提到了您。&amp;#039;, this)&lt;br /&gt;
                                            break&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
                                    used.push(this.id)&lt;br /&gt;
                                }&lt;br /&gt;
                            })&lt;br /&gt;
                            var usedStr = used.join(&amp;#039;|&amp;#039;)&lt;br /&gt;
                            setCookie(&amp;#039;widget-notification-usedIds&amp;#039;, usedStr, getCookie(&amp;#039;widget-notification-removeTime&amp;#039;))&lt;br /&gt;
                        })&lt;br /&gt;
&lt;br /&gt;
                    }, 60000)&lt;br /&gt;
&lt;br /&gt;
                })()&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    },1)&lt;br /&gt;
})&lt;/div&gt;</summary>
		<author><name>Mediawiki&gt;夕舞八弦</name></author>
	</entry>
</feed>