javascript - 如何使 Chrome 扩展弹出窗口可拖动?
问题描述
我注意到 1password chrome 扩展浏览器操作弹出窗口是可拖动的。我怎样才能让我自己的 chrome 扩展做同样的事情?我似乎在 chrome 扩展文档中找不到任何内容。
1password chrome 扩展弹出窗口的其他一些功能我在文档中也找不到。
- 当 1password 弹出窗口出现时,弹出窗口顶部有一个小三角形,出现在我的光标所在的位置。这是怎么发生的?据我所知,与弹出窗口关联的 html 文档显示为没有三角形的矩形。
- 我无法右键单击 1password 弹出窗口的正文来检查 javascript。这可能是因为它们覆盖了默认的 contextMenu 行为吗?
解决方案
标准的弹出窗口不能被拖动,也不能在它的边界之外添加任何东西。它是通过 manifest.json 中的browser_action或page_action声明的弹出页面。
解决方法是:
- 使用chrome.windows.create打开一个单独的窗口,将参数
指定为type
'popup'
- 使用内容脚本在网页内创建一个 DOM 元素,
另请参阅如何在 Google Chrome 扩展程序中真正隔离样式表?
该元素可以是可拖动的。
要检查阻止上下文菜单的页面,您可以从浏览器菜单打开 devtools,然后是“更多工具”,或者先关注地址栏,然后按热键打开 devtools(CtrlShifti或F12在 Windows 中)或从内部 UI 页面打开chrome://inspect/#pages
。
PS 从技术上讲,您可以编写一个外部实用程序并通过nativeMessaging运行它,因此它将使用低级 OS API 来移动标准弹出窗口,但这非常脆弱。
推荐阅读
- visual-studio-code - 在 Visual Studio Code 上运行 Fortran 时遇到问题
- xaml - 为什么此 XAML 行为不同?离开应用程序窗口 UWP 的元素
- c - 关于 C 语言中 printf("%f",5/4) 的愚蠢问题
- pyspark - 如何规范化pyspark中的数据框?
- laravel - Stripe laravel中的重复客户
- javascript - 从对象数组中获取对象
- nginx - try_files 与 NGINX 中的空位置块?
- vue.js - 将 prop 作为参数传递给 Vue 中的方法
- swift - 在 Swift 中将十进制时间转换为小时和分钟
- javascript - 基于用户点击位置的库中的 JS 导航