问题标签 [jsm]
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.
javascript - Firefox 扩展 JSM 和命名空间规则
因此,在 Firefox 扩展中,鼓励扩展的对象存在于 com.contoso.myExtension 之类的子对象中。这样,您就没有将任何对象放在全局命名空间中,并且扩展通常不会互相影响。(至少在常见的 browser.xul 窗口中)
但是根据我对Javascript 代码模块 (JSM)的了解,虽然模块本身在单独的命名空间中工作,但它导出的符号最终会出现在导入它的任何代码的全局命名空间中。此外,扩展不可能是“好的”并且只尝试构建子对象;这些导出的符号只会破坏已经存在的任何全局变量。您也不能导出像 com.contoso.myExtension 这样的符号。它只是一个简单的全局变量。
那么在使用 JSM 时玩得更好的协议是什么?只是制作很长的变量名并希望它们不会发生冲突?
javascript - 如何将参数传递给 Javascript 模块?
我想在我的 Xul 应用程序的单个窗口中使用Javascript 模块(JSM),因此我可以根据需要加载资源。
但是,我需要将窗口传递给 JSM,我不知道该怎么做。按照我的尝试:
在我的resource.jsm中:
在我的窗口中调用:
但我得到:
win 未定义
在 resource.jsm 中。
知道如何使它工作吗?
javascript - Firefox 扩展如何最好地避免污染全局命名空间?
在为 Firefox 开发扩展时,我一直在阅读有关全局命名空间污染的信息,并且我想在我的扩展中尽可能地避免它。有几种解决方案,但通常,这些解决方案似乎只围绕为您的扩展声明一个全局变量,并将所有内容放入其中。因此,您只需向全局命名空间添加一个额外的变量,这还不错。
顺便说一句,我已经向我提出了一个解决方案,可以避免将任何额外的变量放入全局命名空间;将所有内容包装在一个函数中。这里的问题是在您的 XUL 覆盖中没有任何可参考的内容。您必须在叠加层中声明元素,然后在 JS 中添加大量s 来替换XUL 中addEventListener
类似的东西。oncommand="..."
我不想这样做;我绝对希望我的 XUL 在 XUL 本身中包含事件,因为我认为它看起来更干净,所以这不是我的解决方案。因此,我需要至少 1 个全局变量oncommand="..."
来引用 XUL 属性。
因此,共识似乎是为您的扩展提供一个(也是唯一一个)变量,并将所有代码放入其中。这就是问题所在:通常,人们建议将该变量命名为一个漂亮的长而独特的名称,以便与其他变量发生冲突的可能性几乎为零。因此,如果我的扩展 ID 是myextension@mycompany.com
,我可以将变量命名为myextensionAtMycompanyDotCom
,或com.mycompany.myextension
. 这有利于避免全局命名空间中的冲突,但有一个问题;该变量名又长又笨重。我的 XUL 将到处都是对事件处理程序的引用,如下所示oncommand="myextensionAtMycompanyDotCom.doSomeEvent"
. 没有办法避免在我的 XUL 覆盖中引用全局命名空间,因为覆盖只是被添加到浏览器窗口的 DOM 中;它没有自己的命名空间,所以我们不能以某种方式将扩展的变量范围限制在我们自己的覆盖范围内。所以,在我看来,有四种解决方案:
1.在XUL中使用长变量名即可
这会导致相当笨拙、冗长的 XUL 代码,例如:
2.给短变量名添加随机元素
我们为我们的扩展提供了一个更好的短变量名,比如说myExt
,并添加一些随机字符以使其几乎可以肯定是唯一的,例如myExtAX8T9
. 然后在 XUL 中,我们有:
显然,这会导致代码相当丑陋甚至令人困惑,因为随机字符看起来很奇怪,并使其看起来像某种临时变量。
3. 根本不声明任何全局变量
您可以将所有内容都包含在函数中。当然,这意味着在您的 XUL 中没有可引用的内容,因此每个事件都必须附加到addEventListener
您的 JavaScript 代码中使用的 XUL 元素。我不喜欢这个解决方案,因为如上所述,我认为在 XUL 代码中引用事件比搜索大量 JS 代码来查找哪些事件附加到哪些 XUL 元素更简洁。
4. 只需在 XUL 中使用短变量名
我可以只调用我的扩展的变量myExt
,然后我会得到很好的 XUL 代码,例如:
当然,这个短名称更有可能与全局命名空间中的其他内容发生冲突,因此并不理想。
那么,我错过了什么吗?我上面提出的 4 种解决方案有什么替代方案吗?如果不是,那么 4 个中最好的是什么(鉴于 #3 对我来说基本上是不可接受的),为什么?
lucene - ElasticSearch:配置自定义分析器实现
目前我正在评估是否以及如何将旧的基于 lucene 的分析器组件移动到弹性搜索(0.19.18)。由于遗留代码基于 lucene,我将分析器包装在 es-plugin 中。分析器的配置如下所示:
到目前为止,一切都很好。
将返回一个包含正确标记化文本的对象,但
将返回一个根本没有标记化的文本。显然,只应用了小写过滤器而不是 myAnalyzer。索引中的对象都没有被正确分析。
索引映射如下所示(head-plugin 的输出):
由于我是 ES 新手,我无法弄清楚这种行为的真正原因是什么。有人有想法吗?
java - 从 Java 中的 FileDescriptor 获取路径
关于我的问题的一些快速背景:
我正在编写一个将域类型强制规范转换为 Java 安全管理器代码的编译器。简而言之,DTE 定义“类型”(对象),为这些类型分配路径;然后定义“域”(主题),并定义域对各种类型的权限(rwxdc)。我需要在 JSM 中尽可能地模拟这种行为。
目前我正在研究写权限。我已经成功覆盖了 JSM 的 checkWrite(String filename) 方法。列表中的下一个是 checkWrite(FileDescriptor filedescriptor),而这个被证明更棘手。由于 DTE 的定义方式,我需要路径信息来确定是否允许写入操作。
是否可以从 FileDescriptor 中提取路径数据?我猜不是——我检查了文档和各种教程,但没有发现任何迹象表明我可以通过任何方式获取这些信息(但是,我很高兴被显示错误;那会让我的工作更轻松)。
如果上述答案是否定的,有人可以提出可行的解决方法吗?例如,有什么方法可以让我编写本机代码来做我想做的事并将其绑定到我的自定义 JSM 类中?我可以做这样的“高级”事情,但我需要一些想法如何开始。
还是我唯一的选择基本上是拒绝所有使用 FileDescriptor 的写权限?我非常想避免这种情况,因为这是一个糟糕的解决方案,但如果这是我需要知道的现实。
非常感谢你花时间陪伴。
firefox - 在不重启浏览器的情况下更新 Firefox 插件 jsm 模块代码
我正在开发一个从目录加载的 Firefox 插件,而不是 xpi、Firefox 扩展代理文件。该扩展基于 jsm 模块。
有没有办法更新这些模块以反映代码更改。现在唯一的方法是关闭并重新启动浏览器,但这不是开发任何东西的明智方法。
试着:
但没有进行更改。
javascript - Javascript 代码模块相互导入 [Firefox 插件]
我在将 javascript 代码模块用于 firefox 插件时遇到了这种奇怪的行为。我不确定这是相互导入的错误还是糟糕的设计。
因此,假设有 3 个模块 a、b 和 c。
一个.js
b.js
c.js
a.init() 被外部调用。现在使用上面的代码,我从 b 中为 'c' 打了一个未定义的。
经过一些故障排除后,我意识到要纠正这个问题,
- 我可以交换 a.js 中的导入(b 在 c 之前导入)
- 或者我可以删除相互导入(从 c 中删除 b 的导入)使用其中任何一个,事情都很好。
在我的实际代码中,b 和 c 代表一些与 UI 相关的东西,它们具有相互依赖关系。我可以完全摆脱模块的相互导入,并为其中一个注册回调函数。但我想知道是什么导致了这种行为。据我了解,文档对模块之间的导入没有任何严格的指导方针。我还知道,由于模块缓存,一个模块在多次导入时将被共享。但不知何故无法解释这一点。我在这里做错了什么?
javascript - 插件 SDK 错误获取 devtools 模块
我将此代码添加到 Addon-SDK 插件中:
虽然这适用于普通(旧式)插件,cfx run
但我得到:
为了澄清,我试图将这两行添加到这里:https ://github.com/DavidBruant/usefulStackTrace/blob/master/lib/trackStack.js
这在 Addon SDK 的无重启插件系统中是不可能的吗?
firefox-addon - 在 Firefox javascript 代码模块中使用 createObjectURL
我想在从 blob 加载代码的 javascript 代码模块中使用网络工作者。通常,这可以通过在 blob 上调用“window.URL.createObjectURL”并将 createObjectURL 生成的 url 提供给工作人员在网页中完成。尽管没有 window.URL 对象,这在 javascript 代码模块中是否可行?
javascript - 在 Firefox 扩展中导入 .jsm 文件(带有附加 sdk)
我正在尝试在我的 Firefox 扩展中导入一个名为“WebSocketServer.jsm”的 .jsm 文件(来自This github )。情况如下:
- .jsm 文件位于名为 modules 的目录中,路径如下:
root_of_extension/modules/WebSocketServer.jsm
- 我已将这一行添加到我的 chrome.manifest 文件中:
resource external_components modules/
- 我在我的代码中插入了导入文件的推荐:
Cu.import("resource://external_components/WebSocketServer.jsm");
问题是从控制台我看到以下错误
“Cu.import”行中的第 6 行。你有什么想法?