问题标签 [plugins]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2368 浏览

GPL 程序的专有插件:解释语言呢?

我正在用 Python 开发一个 GPL 许可的应用程序,需要知道 GPL 是否允许我的程序使用专有插件。这是FSF在这个问题上必须说的:

如果在 GPL 下发布的程序使用插件,插件的许可证有什么要求?

这取决于程序如何调用其插件。如果程序使用fork和exec调用插件,那么插件是独立的程序,所以主程序的license对它们没有要求。

如果程序动态链接插件,它们之间进行函数调用并共享数据结构,我们认为它们形成了一个单独的程序,必须将其视为主程序和插件的扩展。这意味着插件必须在 GPL 或与 GPL 兼容的自由软件许可下发布,并且在分发这些插件时必须遵守 GPL 的条款。

如果程序动态链接插件,但它们之间的通信仅限于通过一些选项调用插件的'main'函数并等待它返回,这是一种边缘情况。

fork/exec 和动态链接之间的区别,除了有点人为之外,并没有延续到解释语言:Python/Perl/Ruby 插件怎么样,它通过importor加载execfile

(编辑:我理解为什么 fork/exec 和动态链接之间的区别,但似乎有人想要遵守 GPL 但违背“精神”——我不——可以只使用 fork/exec 和进程间通信几乎可以做任何事情)。

最好的解决方案是在我的许可证中添加一个例外,以明确允许使用专有插件,但我无法这样做,因为我使用的是 GPL 的Qt / PyQt 。

0 投票
2 回答
277 浏览

奇怪的 Rails 身份验证问题

我正在为我正在开发的应用程序使用 RESTful 身份验证 Rails 插件。我有一个奇怪的问题,我无法深入了解。本质上,当我在一段时间不活动后第一次登录应用程序时(应用程序部署在生产中,但仅供我使用),我将被带到一个 404 页面,但如果我回到主页并再次登录,一切按计划进行。有任何想法吗?

0 投票
2 回答
19619 浏览

如何为 IE 编写插件

IE Developer Toolbar 是一个插件,可以与浏览器对接或分离。我知道在 IE 中比在 Firefox 中更难做到这一点。

  • 如何创建一个 IE 插件?
  • 哪些语言可用于此任务?
  • 如何制作 Hello World 插件?
0 投票
2 回答
399 浏览

从 Firefox 书签中显示的 http-get 读取

我正在尝试获取一个 Firefox 插件来从 HTTP 获取中读取数据,解析结果并将它们作为链接呈现在类似书签的下拉菜单中。

那么我的问题是:有没有人有任何示例代码可以做到这一点?

0 投票
6 回答
6571 浏览

构建 Google Chrome 插件的提示/资源

在试驾了 30 分钟左右的 Google Chrome 之后,我喜欢它,即使它目前看起来很简单。添加一些我不能没有的东西的明显方法是通过插件。有没有人有任何关于如何开始为 Chrome 构建插件/插件的资源链接?谢谢。

0 投票
2 回答
11037 浏览

如何编写自动输入代理密码的 Firefox 插件?

假设有人在一家公司工作,该公司建立了一个 HTTP 代理,以防止在没有密码身份验证的情况下访问互联网(我认为是 NTLM)。还假设这个密码每天轮换一次,这增加了很少的安全性,但主要是为了惹恼员工。如何开始编写一个自动输入这些轮换密码的 Firefox 插件?

澄清一下:这个插件不仅仅是提交密码;附加组件将使用密码轮换方案的一些知识以编程方式生成它。

0 投票
8 回答
23315 浏览

对于 C++ 插件系统,什么是安全的?

C++ 中的插件系统很难,因为 ABI 没有正确定义,并且每个编译器(或其版本)都遵循自己的规则。然而,Windows 上的 COM 表明,可以创建一个最小的插件系统,允许具有不同编译器的程序员使用简单的接口为主机应用程序创建插件。

让我们切合实际,暂时搁置在这方面没有多大帮助的 C++ 标准。如果我想为 Windows 和 Mac(以及可选的 Linux)编写一个支持 C++ 插件的应用程序,并且如果我想为插件作者提供相当多的编译器选择(比如不到 2 年的 Visual C++ 版本) 、GCC 或 Intel 的 C++ 编译器),我可以依靠 C++ 的哪些特性?

当然,我假设插件是为特定平台编写的。

在我的脑海中,这里有一些我能想到的 C++ 特性,我认为这就是答案:

  • vtable 布局,通过抽象类使用对象?(是的)
  • 内置类型,指针?(是的)
  • 结构体,联合体?(是的)
  • 例外?(不)
  • 外部“C”函数?(是的)
  • 具有内置参数类型的 stdcall 非外部“C”函数?(是的)
  • 具有用户定义参数类型的非标准调用非外部“C”函数?(不)

如果您在该领域有任何经验可以分享,我将不胜感激。如果您知道任何具有 C++ 插件系统的成功应用程序,那也很酷。

卡尔

0 投票
3 回答
653 浏览

.NET 应用程序的插件设计

我正在考虑用 C#(目前是遗留的 VB6 代码)重写我们的应用程序的一部分。我开始使用的模块负责将来自各种系统的数据导入我们的数据库。大约每年 5-6 次,一个新客户要求我们为他们使用的系统编写一个新的导入。目前,这要求我们为添加到应用程序的每个新导入选项发布一个新版本的软件。

重写的目标之一是使应用程序支持插件。每个新的导入都可以成为一个单独的程序集,主机应用程序将识别并允许最终用户与之交互。这有望在某种程度上简化生活,因为我们可以简单地将一个新程序集放入目录中,并让它被主(主机)应用程序识别和使用。

我正在努力解决的问题之一与我们目前支持的导入选项之间的差异有关。在某些情况下,我们实际上让用户指向一个目录并将目录中的所有文件读入我们的系统。在其他情况下,我们允许它们指向单个文件并导入其内容。此外,某些导入具有用户应用的日期范围限制,而其他导入则没有。

我的问题是,我如何设计应用程序,以便在我们构建和支持的导入之间具有一定的灵活性,同时实现一个通用接口,使宿主应用程序能够轻松识别插件和选项每个都暴露给用户?

0 投票
6 回答
122754 浏览

如何在 Vim 中列出加载的插件?

有人知道在Vim中列出“加载的插件”的方法吗?我知道我应该自己跟踪这类事情,但能够检查当前状态总是很好的。

0 投票
3 回答
1124 浏览

插件框架中的消息传递

首先,我的博客上有一些关于这个问题的背景资料:

我知道描述不是很清楚,所以我会在这里尽可能地总结我正在尝试的内容。该应用程序是一个个人理财程序。本文末尾提供了有关框架本身的更多背景信息。

框架可以处理许多不同类型的插件(例如,帐户、导出、报告等)。但是,我专注于一类特定的插件,即所谓的数据插件,因为正是这类给我带来了问题。我有一类用于帐户的数据插件,一类用于交易等。

我正在进行大规模的重构,这给我留下了以下数据插件架构:

  • 数据插件对象(实现初始化、安装和插件元数据)[实现IDataPlugin<FactoryType>]
  • 数据对象(例如帐户)[实现,例如IAccount]
  • 创建数据对象实例的工厂[实现,例如IAccountFactory]

以前数据对象和插件对象合二为一,但这意味着账户中记录的每笔交易都必须实例化一个新的交易插件,这导致了许多问题。不幸的是,这种重构破坏了我的消息传递。数据对象实现INotifyPropertyChanged了,所以我遇到了一个新问题,我不确定如何解决:插件对象正在向消息代理注册事件,但实际上是数据对象触发了事件。这意味着订阅插件当前必须订阅每个创建的帐户,交易等! 这显然是不可扩展的。

据我目前所知,我有两种可能的解决方案:

  1. 使数据插件对象成为数据对象和消息代理的中间人,可能批量更改通知。我不喜欢这样,因为它给消息传递系统增加了另一层复杂性,我觉得我应该可以不用。
  2. 垃圾当前基于事件的实现并使用其他更易于管理的东西(内存中 WCF?!)。

所以我想我真的在问:

  1. 你将如何解决这个问题?
  2. 您认为我忽略了哪些潜在的解决方案?
  3. 我的方法甚至模糊地走上正轨/明智吗?!:-)

正如您从博客文章的日期中可以看出的那样,这个问题的某些变体已经让我感到很长一段时间了!因此,我们将不胜感激任何和所有的回应。

框架本身的背景如下:

我的插件框架由三个主要组件组成:插件代理、首选项管理器和消息代理。插件代理负责插件的基本工作:发现和创建插件。首选项管理器管理框架和各个插件的用户首选项,例如启用了哪些插件,数据应该保存在哪里等。通过发布/订阅进行通信,消息代理位于中间,收集所有发布的消息类型和管理订阅。发布/订阅当前是通过 .NETINotifyPropertyChanged接口实现的,该接口提供了一个名为PropertyChanged; 消息代理建立一个所有插件实现的列表INotifyPropertyChanged并订阅其他插件此事件。消息传递的目的是让账户和交易插件通知存储插件数据发生了变化,以便保存。