Javascript 如何在全局范围内不公开第三方库?

Javascript 如何在全局范围内不公开第三方库?,javascript,bookmarklet,Javascript,Bookmarklet,我正在编写一个bookmarklet,它使用另一个第三方库来执行它的一些功能。如何使用bookmarklet中的第三方库而不在全局范围内公开库 源代码目前正在以下位置提交: 所讨论的库是moment.js,如果用户使用bookmarklet,它当前将在全局范围内公开。由于您只是在自己的bookmarklet中包含moment.js代码,所以您可以将moment.js代码放在外部函数中。这将使您可以使用它 要不生成全局变量,必须编辑moment.js源代码,因为它显式地创建全局符号,而不管它是如何

我正在编写一个bookmarklet,它使用另一个第三方库来执行它的一些功能。如何使用bookmarklet中的第三方库而不在全局范围内公开库

源代码目前正在以下位置提交:
所讨论的库是moment.js,如果用户使用bookmarklet,它当前将在全局范围内公开。

由于您只是在自己的bookmarklet中包含moment.js代码,所以您可以将moment.js代码放在外部函数中。这将使您可以使用它

要不生成全局变量,必须编辑moment.js源代码,因为它显式地创建全局符号,而不管它是如何包含的。我没有深入研究它的源代码,但它看起来像是函数
makeGlobal()
定义了它的接口。您可以修改它,将矩函数作为方法添加到您在函数
f()
中声明的对象上,这样就不会影响全局范围

看起来您要修改此行:

// makes moment function globally available
this['moment'] = moment;

更改
moment()
函数的访问方式。

您的bookmarklet中如何包含
moment.js
,您可以对其进行修改吗?目前,我正在使用grunt任务将文件与实际bookmarklet文件连接起来,从而包含moment.js。我也在考虑使用,它允许我在bookmarklet文件中包含moment.js文件考虑到这是一个bookmarklet,在全局范围内使用moment有什么影响?在添加它之前,我可以检查它是否存在于页面中,如果这是一个问题,我可以在拉它之前检查它是否已经存在,但我担心的是,我将在我不知道的网页的全球范围内注入第三方库-这意味着我可能会影响them@shanti-我不知道你在问什么。您可以使用编辑器将moment.js代码粘贴到
函数f()
中。另外,请参阅我关于阻止moment.js生成全局符号的附加注释。好的,我将看看为momentjs定义的makeGlobal函数