网页全屏以及禁用F11默认行为-vue项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网页全屏以及禁用F11默认行为-vue项目相关的知识,希望对你有一定的参考价值。

参考技术A 我在写网页全屏时候发现,通过按键F11打开的全屏貌似使用脚本无法正确关闭。具体表现是,按键F11会打开全屏,这个时候打印window对象中的 window.document ,会发现 window.document 下面的有关全屏的属性并未改变, window.document.fullscreen 的值为 false ,此时反复点击切换全屏按钮全屏不会切换。通过 screenfull.toggle() 方法切换全屏,断点发现确实执行到方法里面了,但是并没有关闭全屏(我猜测F11打开的全屏可能权限更高只能由F11关闭,toggle方法虽然执行了切换全屏并且打印 window.document.fullscreen 的值发现也切换 true 和 false ,但是由于权限不足并没有真正关闭F11打开的全屏)。

之后,换一个思路,既然无法操作F11打开的全屏,那就阻止F11的默认行为。在适当时机(我选择在入口组件中)监听按键,如果用户按了F11键( keyCode == 122 ),则阻止默认行为,去进行我们自定义的操作,比如使用 screenfull.toggle() 方法切换全屏,这样看上去就像是在正常使用F11。然后是处理按钮点击切换全屏。有了以上的步骤,下面就很简单了。在页面添加按钮,点击按钮切换全屏,具体参照如下步骤:

注:网页全屏有很多兼容性写法, screenfull 为我们处理了兼容并且监听了全屏状态,这样我们就不需要再判断是否全屏,直接使用 toggle 方法就可以切换全屏了。

npm install screenfull --save

选择在入口组件 App.vue 中监听按键

进入网页按F11键,发现全屏了,这时无论时继续F11按键或者是Esc键或者点击切换全屏按钮都能关闭全屏;进入其他路由按F11键也能却换全屏,看上去并没有禁用F11的功能(实际上是禁用了F11默认行为的)。至此已经完成了整个项目的全屏切换。

完_______

QWebEngineView 如何禁用捏合缩放

【中文标题】QWebEngineView 如何禁用捏合缩放【英文标题】:QWebEngineView how to disable pinch-to-zoom 【发布时间】:2019-09-26 10:28:41 【问题描述】:

我在显示 HTML 网页的触摸 Linux 设备上运行带有 QWebView 的 Qt 5.9.4 应用程序。

当用户在屏幕上捏手指时,他们会放大网页。我想禁用该行为,因为所有网页都应该 100% 全屏显示。

我可以通过将user-scalable=no 添加到视口来暂时在网页中禁用它(因为我拥有他们的代码),但从长远来看这不会起作用,因为不是每个网页都会有它。

我尝试在我的应用程序的不同元素上使用 eventFilter,但无法捕获任何手势甚至鼠标事件。

这就是我创建 web 视图的方式(在 QDialog 中):

void Dialog::createWebView() 
  view = new QWebEngineView(this);
  profile = new QWebEngineProfile();
  page = new QWeEnginePage(profile);
  view->setPage(page);
  view->setUrl(QUrl(path));

这是我的 eventFilter 类:

EvFilter::EvFilter(QObject *parent) : QObject(parent)




bool EvFilter::eventFilter(QObject *obj, QEvent *event)


    qDebug() << event->type() << "\n";
    return QObject::eventFilter(obj, event);

我试过了

EvFilter* evf = new EvFilter();
view->installEventFilter(evf);

而且在所有其他元素(配置文件、页面、对话框)上,但似乎无法获得与鼠标或手势对应的任何事件。 我究竟做错了什么?我怎样才能在整个 webview 中防止这种行为?

将事件侦听器添加到 QApplication 对象后,我可以检测到 TouchBegin、TouchUpdate、TouchCancel 和 TouchEnd 事件,但没有其他(没有 Gesture 事件)。我不知道如何检测 touchevent 是否是缩放手势。

【问题讨论】:

尝试在view-&gt;setUrl(QUrl(path));之后添加EvFilter* evf = new EvFilter(); view-&gt;focusProxy()-&gt;installEventFilter(evf); @eyllanesc 不幸的是,它的工作方式与在整个 QApplication 上安装它的方式相同,我可以看到触摸事件,但我不知道如何知道它们何时用于缩放以及何时只是正常触摸事件。我想在所有设备上完全禁用缩放。是否可以?我找不到任何禁用缩放的设置。 【参考方案1】:

我认为你可以在对话框上使用它(没有测试它)。我有一些其他小部件显示 QML QtWebView,而我为防止小部件的孩子获得捏手势所做的事情是:

this->grabGesture(Qt::PinchGesture, Qt::DontStartGestureOnChildren);

这会阻止底层小部件接收 PinchGesture,以便您自己处理。

【讨论】:

以上是关于网页全屏以及禁用F11默认行为-vue项目的主要内容,如果未能解决你的问题,请参考以下文章

Vue项目中点击按钮实现全屏模式

vue中实现全屏以及对退出全屏的监听

vue中如何实现全全全屏和退出全屏?

vue全屏插件screenfull的使用

火狐浏览器怎么把打开的网页全屏

vue客户端项目的基本搭建以及ElementUI