首页> 中国专利> 一种全屏显示模式下按-号或右击菜单关闭网页的新技术

一种全屏显示模式下按-号或右击菜单关闭网页的新技术

摘要

目前,全世界所有浏览器都采用F11功能键实现网页全屏或正常显示,很不普及,影响了全世界网民的上网体验;本申请人已递交过“网页默认全屏和Esc批量正常显示的新一代浏览技术”的专利申请。全屏显示网页确实给用户以界面清爽的良好体验,但所有浏览器都无法在全屏显示模式下直接关闭网页,需切换到正常显示状态,再按页签上的小叉关闭,大概耗时3秒。本发明内容:在全屏显示模式下,按减号‑键关闭网页,只需1秒,给用户良好体验,比原来切换到正常显示状态,再按页签上的小叉关闭,每次节省2秒;鼠标右击菜单关闭网页功能既适合全屏显示模式,也适合非全屏显示模式。以Python语言编程。

著录项

  • 公开/公告号CN112416502A

    专利类型发明专利

  • 公开/公告日2021-02-26

    原文格式PDF

  • 申请/专利权人 深圳市哈哈丫丫互联网有限公司;

    申请/专利号CN202011398604.8

  • 发明设计人 芮爱平;

    申请日2020-12-04

  • 分类号G06F9/451(20180101);G06F9/445(20180101);G06F16/957(20190101);

  • 代理机构

  • 代理人

  • 地址 518109 广东省深圳市龙华区大浪街道高峰社区和平路龙军花园A1A2栋一单元1504室

  • 入库时间 2023-06-19 10:02:03

说明书

技术领域

新一代极速简约全屏浏览器。

背景技术

截止2020年12月3日,全世界所有浏览器(包括但不限于:谷歌、IE、360、火狐狸、搜狗和Edge浏览器)都采用F11功能键实现网页全屏或正常页签显示的切换,在网民中很不普及,影响了全世界50亿网民的上网体验,尤其在世界销量第一或第二的联想电脑上,功能键需要同时按下Fn + F11两个键,实在太麻烦了;本申请人已经递交过一个“网页默认全屏和Esc批量正常显示的新一代浏览技术”的发明专利申请(申请号:202011353618.8)。全屏显示网页确实给用户以界面清爽的良好体验,但目前所有的浏览器都无法在全屏显示模式下直接关闭网页,需要切换到正常显示状态,然后按页签上的小叉关闭,大概耗时3秒钟,迫切需要发明一种快捷的全屏网页关闭技术。

发明内容

全屏显示模式指网页可按全屏切换键(如:Esc或空格或Alt)随意切换全屏或正常显示;而全屏显示状态不一定处在全屏模式下。本发明内容:在全屏显示模式下(图1和图2),按减号-键或鼠标右击菜单(图3)关闭网页,只需1秒,给用户以良好体验,比原来切换到正常显示状态,然后按页签上的小叉关闭,每次节省2秒;全世界大约有50亿网民,每人每天操作一次就可以节省100亿秒,相当于1389人年,若按普通白领平均年薪8万元人民币,该技术每天可节约1.11亿元人民币。鼠标右击菜单(图3)关闭网页功能既适合全屏显示模式,也适合非全屏显示模式。Python语言是目前最流行的计算机开发语言,它有最庞大的第三方生态圈,火狐狸浏览器原来基于C++语言开发,两年前就逐步转向Python语言开发了。本发明就以Python语言提供编程代码,启用的第三方软件开发包是Qt和PyQt,代码在申请人公司自产全屏浏览器中调试通过(未商用)。Python语言的编程原理同样适用于C++和JAVA语言或其他高级计算机语言。

附图说明

图1、浏览器导航页全屏显示

图2、普通网页全屏显示

图3、网页全屏显示下右击菜单“关闭”功能。

具体实施方式

采用Python 3.7、PyQt5 和 PyQtWebEingine 第三方开发包实现新一代极速简约全屏浏览器,网页全屏显示模式下按减号-或鼠标右击关闭网页是全屏浏览器的主要创新功能之一;采用Linux流行版本CentOS 7.7,开发平台是 PyCharm community 2019.3 版本。以#开头的是注释行,/ 是折行符,以下是关闭网页的相关代码:

1、主要程序框架代码,隐藏具体类的代码

import sys,json,os,datetime,warnings,base64

from subprocess import Popen

# 导入系统功能包

from PyQt5.QtCore import QUrl, Qt, QCoreApplication, pyqtSignal, QDir,QFileInfo, /

/ QStandardPaths,QStringListModel,QPoint,QMarginsF

from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit,QToolBar, QTabWidget, /

/ QWidget, QHBoxLayout,QDialog, QPushButton, QProgressBar, QMenu, QLabel,QMessageBox,/

/QAction,QListView,QToolButton,QCheckBox,QTreeView,QFileDialog

from PyQt5.QtGui import QIcon,QDesktopServices,QCursor,QKeySequence, /

/ QStandardItemModel,QStandardItem,QPageLayout,QPageSize

from PyQt5.QtWebEngineWidgets import QWebEngineView, /

/ QWebEngineSettings, QWebEngineDownloadItem, QWebEnginePage

from pynput.keyboard import Controller,Key

# 导入第三方开发包

download_item_ls = []

# 储存下载任务数组变量

webview_group = []

# 储存网页实例数组变量

webview_parent_group = []

# 储存网页父实例数组变量

webview_group_PDF_Finished = []

# 储存网页实例预览网页的PDF文件完成状态的数组变量

class myQMenu(QMenu):

# 重写QMenu菜单类

class WebView(QWebEngineView):

# 重写网页展示QWebEngineView类

class myQLineEdit(QLineEdit):

# 重写QLineEdit类

class DownloadWidget(QProgressBar):

# 自定义下载DownloadWidget类,继承QProgressBar类

class myQMainWindow(QMainWindow):

# 重写QMainWindow类

class FindToolBar(QToolBar):

# 自定义页面查找FindToolBar类,继承QToolBar类

class BookmarkWidget(QTreeView):

# 自定义书签类,继承QTreeView类

class Browser(myQMainWindow):

# 自定义Browser类,调用网页展示WebView类,继承myQMainWindow类

class MyBrowser(myQMainWindow):

# 自定义MyBrowser类,调用Browser类,继承myQMainWindow类

if __name__ == "__main__":

# 主程序

argvs = sys.argv

argvs.append("--no-sandbox")

QCoreApplication.setAttribute(Qt.AA_UseSoftwareOpenGL)

app = QApplication(argvs)

window = MyBrowser()

# 实例化主窗口和加载首页面

window.show()

# 显示主窗口

sys.exit(app.exec_())

2、与全屏显示切换和减号-号关闭网页(粗体)有关的代码

class WebView(QWebEngineView):

# 自定义WebView类,继承QWebEngineView类,这是PyQt的网页显示模块

@staticmethod

def minimum_zoom_factor():

return 0.25

@staticmethod

def maximum_zoom_factor():

return 5

def __init__(self, mainWin):

super().__init__(mainWin)

self.mainWin = mainWin

def createWindow(self, QWebEnginePage_WebWindowType):

# 创建网页窗口的方法

new_webview = WebView(self.mainWin)

self.mainWin.create_tab(new_webview)

# 调用Browser实例的创建第二个及以上页签的方法

return new_webview

# 返回打开的页面实例

class MyBrowser(myQMainWindow):

……

# 创建主窗口和第一个导航页签的方法

def newTab(self):

# 创建第一个导航页签的方法

self.tab = QWidget()

self.tabWidget.addTab(self.tab, "新")

self.tabWidget.setCurrentWidget(self.tab)

self.Layout = QHBoxLayout(self.tab)

self.Layout.addWidget(Browser(self))

# 在第一个新页签加载Browser()实例显示导航页

class Browser(myQMainWindow):

def create_tab(self, webview):

# 创建第二个及以上页签的方法

self.tab = QWidget()

self.mainWin.tabWidget.addTab(self.tab, '')

self.mainWin.tabWidget.setCurrentWidget(self.tab)

self.Layout = QHBoxLayout(self.tab)

web_view=Browser(self.mainWin, webview=webview)

# 递归调用本类,实例化超链接网页,附加地址栏

self.Layout.addWidget(web_view)

# 把网页和附加地址栏加载到新页签

webview.setParent(None)

# 把新网页置顶

webview.showFullScreen()

# 使新网页默认全屏显示

web_view.grabKeyboard()

# 把网页和附加地址栏设置为捕获键盘,进入全屏模式

def initUI(self):

# 网页初始化方法

if self.webview == None:

self.webview = WebView(self)

self.webview.load(QUrl("http://www.hao123.com/"))

# 第一个页签加载导航页www.hao123.com

elif self.webview == '':self.webview = WebView(self)

self.webview.setZoomFactor(1.35)

webview_group.append(self.webview)

# 把网页实例添加到数组变量webview_group

webview_group_PDF_Finished.append(0)

self.webview.page().titleChanged.connect(self._title_changed)

self.webview.page().iconChanged.connect(self._icon_changed)

self.initToolbar(self.webview)

self.setCentralWidget(self.webview)

self.webview.setContextMenuPolicy(Qt.CustomContextMenu)

# 设定网页自定义右击菜单模式

self.webview.customContextMenuRequested.connect(self.context_webmenu_event)

# 设定网页自定义右击激活context_webmenu_event菜单的方法(见段落3)

webview_parent_group.append(self.webview.parent())

# 把网页的父实例添加到数组变量webview_parent_group

if self.mainWin.INDEX==0:

# 如是第一个导航页签,则执行以下代码

self.webview.setParent(None)

# 把导航页置顶

self.webview.showFullScreen()

# 把导航页设置为默认全屏显示

webview_parent_group[0].grabKeyboard()

# 让导航页父实例捕获键盘, 进入“全屏模式”

def keyPressEvent(self, QKeyEvent):

# “全屏模式”处理键盘输入的方法

key = QKeyEvent.key()

# 获取键盘输入值

if self.urlbar.hasFocus():self.release_keyboard()

# 如地址栏已经有焦点,则调用release_keyboard方法使“全屏模式”失效,地址栏

# 接管正常键盘输入

elif key == Qt.Key_Escape or key == Qt.Key_Space orQKeyEvent.modifiers() == /

/ Qt.AltModifier:

# 如输入Esc件或空格键或Alt键,则处理“全屏模式”如下

if not webview_group[self.mainWin.INDEX].isFullScreen():

# 如当前网页不是“全屏显示”,则执行以下代码进入全屏显示状态

webview_group[self.mainWin.INDEX].setParent(None)

# 把当前网页置顶

webview_group[self.mainWin.INDEX].showFullScreen()

# 使当前网页全屏显示

print('Esc full screen...')

else:

# 如当前处于全屏显示状态,则执行以下代码,批量恢复到正常显示

for i in range(0,len(webview_group)):

# 遍列网页全屏实例数组变量webview_group

webview_group[i].showNormal()

# 使网页逐个正常显示

webview_parent_group[i].setCentralWidget( /

/ webview_group[webview_fullscreen_index[i]])

# 把正常显示的网页逐个放置到对应的父实例

print('Esc normal screen...')

elif key == Qt.Key_Minus:

# 如输入减号-号, 则执行以下代码

self.mainWin.close_Tab(self.mainWin.INDEX)

# 调用关闭网页方法close_Tab把本网页关闭

else:

self.release_keyboard()

# 调用网页“全屏模式”失效的方法

keyboard = Controller()

# 模拟键盘实例化

if key == Qt.Key_Backspace:

# 处理倒格键,Qt不允许模拟输入倒格键,可能出于安全考虑,需两步模拟

keyboard.press(Key.left)

# 模拟按下左光标键,让接管的控件捕获

keyboard.release(Key.left)

# 模拟松开左光标键,让接管的控件捕获

keyboard.press(Key.delete)

# 模拟按下删除键,让接管的控件捕获

keyboard.release(Key.delete)

# 模拟松开删除键,让接管的控件捕获

elif key>32 and key<=126:

# 如按的键是除空格外的打印字符,则应模拟键盘输入,避免用户重复输入

keyboard.press(chr(key))

# 模拟按下其他键,让接管的控件捕获

keyboard.release(chr(key))

# 模拟松开其他键,让接管的控件捕获

def release_keyboard(self):

# 使网页“全屏模式”失效的方法

for i in range(0, len(webview_parent_group)):webview_parent_group[i].releaseKeyboard()

# 逐个使网页父实例的“全屏模式”失效

3、实现鼠标右键菜单关闭网页的代码

def context_webmenu_event(self, point):

# 鼠标右击显示菜单的方法

if self.webview == self.sender():

linkUrl = self.webview.page().contextMenuData().linkUrl().toString()

linkTxt = self.webview.page().contextMenuData().linkText()

editable = self.webview.page().contextMenuData().isContentEditable()

context_menu = QMenu()

# 实例化右击菜单

close_action = context_menu.addAction(QIcon('img/close.jpg'), "关闭")

# 为右击菜单添加"关闭"项

backward_action = context_menu.addAction(QIcon('img/back.jpg'), "后退")

# 为右击菜单添加"后退"项

forward_action = context_menu.addAction(QIcon('img/next.jpg'), "前进")

# 为右击菜单添加"前进"项

# 省略部分无关代码

if chosen_action == backward_action:self.mainWin.trigger(QWebEnginePage.Back)

# 点击了“后退”功能,返回前一页

elif chosen_action == forward_action:self.mainWin.trigger(QWebEnginePage.Forward)

# 点击了“前进”功能,返回下一页

elif chosen_action == close_action:self.mainWin.close_Tab(self.mainWin.INDEX)

# 点击了“关闭”功能,调用下面的关闭页签方法,关闭本网页

def close_Tab(self, index):

# 关闭页签的方法

self.webview2 = webview_group[index]

# 把索引号index所指的网页实例储存到变量self.webview2中

self.webview2.page().setAudioMuted(True)

# 关闭所指网页的声音功能,否则网页关闭后,还可能有声音播放

self.tabWidget.removeTab(index)

# 删除索引号index所指的页签

self.webview2.close()

# 关闭所指网页

webview_group.remove(self.webview2)

# 把网页实例从网页实例数组变量中删除

webview_parent_group.remove(webview_parent_group[index])

# 把网页父实例从网页父实例数组变量中删除

if self.tabWidget.count() == 0:self.close()

# 如果是第一个页签,那么关闭浏览器软件。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号