gpt4 book ai didi

javascript - 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方式是什么?

转载 作者:行者123 更新时间:2023-11-28 18:36:47 29 4
gpt4 key购买 nike

问题

当用户单击上下文菜单项(我通过扩展程序背景页面创建)或用户单击浏览器操作图标时,我想在网页上显示弹出窗口或侧边栏窗口。这个侧边栏窗口将显示一些 HTML 标记,我将在扩展目录中的一个单独文件(sidebar.html)中显示这些标记,并且这个 sidebar.html 将由 sidebar.js(也是我的目录中的一个文件)管理我的问题是是显示此 sidebar.html 的最佳方式吗?

我不希望它成为模式或灯箱,以便为我的用户提供更好的用户体验,而且我也知道不希望它成为浏览器操作弹出窗口,无论如何都无法以编程方式打开它。

这是我正在寻找的内容的 gif,

http://recordit.co/y2QdGrdzGa

<小时/>

迄今为止的尝试

据我从我读到的大量答案中了解到(我可能是错的),我几乎没有选择。

选项 1 - 注入(inject) HTML 使用内容脚本注入(inject) sidebar.html,该脚本中有一个监听器,用于监听来自后台脚本的消息,以进行上下文菜单单击或浏览器操作单击。收到消息后,将运行以下内容脚本(contentscript.js),

  chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) 
{
if ( request.action == "openSideBar" ) {
$.get(chrome.extension.getURL('../sidebar.html'),
function(data) {
$(data).appendTo('body');
});
}});

这是我的 sidebar.html

<!DOCTYPE html>
<html><head>
<title>I am Sidebar</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<link href="sidebar.css" rel="stylesheet" type="text/css">

<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="sidebar.js"></script>

</head><body>
<p>Hello World!</p>
</body></html>

选项 1a - 在页面中注入(inject) sidebar.js 作为注入(inject)脚本(不推荐) 选项 1b - 使用 Sidebar.js 作为内容脚本与 sidebar.html 进行通信。由于我在 sidebar.js 中使用 Angular,所以这里有些复杂,但如果这是我采取的路线,我可以解决这个问题。

选项 2 - 使用 Iframe -

从阅读了很多答案来看,听起来大多数人想要在页面上显示一个窗口,使用 iframe,类似这样

var iFrame  = document.createElement ("iframe");
iFrame.src = chrome.extension.getURL ("sidebar.html");

document.body.insertBefore (iFrame, document.body.firstChild);

选项 3 - Shadow DOM

我什至不知道该怎么做。我找不到任何东西。我找到的几个答案听起来与选项 1 类似。

<小时/>

目前已阅读的答案

Injecting chrome extension UI using shadow DOM

Injecting content script in dynamically created iframe

Chrome Extension - Injected Iframe not accessing Chrome browserAction or chrome.tabs or AngularJS

How to show a modal popup from the context menu?

Chrome extension inject sidebar into page

<小时/>

我一直在从一个问题跳到另一个问题,试图找到一种可靠的方法,但所有答案都指向其他问题。希望有人能够给出一个非常简单的答案,例如“Iframe 是解决此问题的最佳方式,因为某某”

最佳答案

您可以使用选项 1b(使用 sidebar.js 作为内容脚本)或选项 2(使用iframe)。

但我更喜欢选项 2,因为:

  1. 如果您使用 angularjs,则无需在每次注入(inject)框架时引导 Angular 应用。
  2. iframe 中的 css 文件不会与页面 UI 冲突。请参阅我的问题: Using bootstrap.css as content script distorts gmail UI?
  3. 您可以将整个应用程序代码放入 iframe 中,并使用内容脚本注入(inject)框架并仅监听消息。您的代码将易于维护和调试。

关于javascript - 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36926284/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com