Javascript Firefox Bookmarklet:向全局命名空间公开函数
我正在开发一个中等复杂的Bookmarklet,它在Chrome中运行良好,但在Firefox中无法运行。当我在Firefox中运行Bookmarklet时,它会重定向到一个新页面,该页面上只显示Javascript Firefox Bookmarklet:向全局命名空间公开函数,javascript,firefox,bookmarklet,Javascript,Firefox,Bookmarklet,我正在开发一个中等复杂的Bookmarklet,它在Chrome中运行良好,但在Firefox中无法运行。当我在Firefox中运行Bookmarklet时,它会重定向到一个新页面,该页面上只显示true 我已经将原因缩小到一个非常具体的事情:Firefox似乎不喜欢将新函数公开到全局名称空间 如果是这样的话,你能了解更多吗?是否在任何地方记录了这些信息,以便我可以了解更多信息?关于bookmarklet构建的细微差别的资源似乎很少,我找不到任何相关的。第二个问题是,是否有任何已知的解决办法 对
true
我已经将原因缩小到一个非常具体的事情:Firefox似乎不喜欢将新函数公开到全局名称空间
如果是这样的话,你能了解更多吗?是否在任何地方记录了这些信息,以便我可以了解更多信息?关于bookmarklet构建的细微差别的资源似乎很少,我找不到任何相关的。第二个问题是,是否有任何已知的解决办法
对于一些示例(记住,要测试它们,只需将这些代码行复制到Firefox中的bookmarklet中,然后在任何页面上运行它们)
重定向bookmarklets
javascript:!函数(){window.ok={test:function(){}}}()代码>
非重定向书签let
javascript:!函数(){window.ok={test:!0}}()代码>
有什么想法吗?谢谢
现在,我计划在Knockout中使用手动订阅来获得所需的功能。不过,知道这个问题的答案还是不错的。这与暴露全局无关。它与bookmarklet的最终评估值有关
任何被计算的JS代码都会返回一个来自最后一行代码或最后一个块的值
对我来说,在Firefox中,两个示例都重定向,因为它们都返回true。您可以通过将代码直接粘贴到Firefox控制台来测试这一点
此外
javascript:!function(){...}();
这很奇怪。我从未见过这种模式
这是当今最常见的bookmarklet模式:
javascript:(function(){...})();
只要不以返回结束匿名函数
,该模式将计算为未定义
,并且不会发生重定向
实现相同结果的旧方法是始终使用void(0)代码>作为最后一行代码。它的计算结果也是undefined
,如果它是最后一行,那么整个脚本的计算结果是undefined
,并且不会发生重定向代码>好答案;所以,是丑八怪重写了我的IIEF才打破了它。你知道为什么吗?现在我不知道了这是生活,不是生活。。如果你明白我的意思,IIEF就是处理不调用某些东西的东西;)回答得好。在评论中使用@Crayon暴力的帮助下,我慢慢地意识到了这一点。我发布的代码中的iLife模式来自Uglify,它使用最少字符的iLife。一、 我也喜欢你提到的更常见的一种。