gpt4 book ai didi

javascript - Firefox 小书签 : Exposing functions to the global namespace

转载 作者:行者123 更新时间:2023-11-29 16:13:59 26 4
gpt4 key购买 nike

我正在开发一个适度复杂的 Bookmarklet,它在 Chrome 中运行良好,但我无法在 Firefox 中运行。当我在 Firefox 中运行 Bookmarklet 时,它会重定向到一个新页面,上面只显示 true

我已经将原因缩小到一个非常具体的事情:Firefox 似乎不喜欢将新功能暴露给全局命名空间。

如果是这种情况,您是否可以了解更多信息?这是否记录在任何地方,以便我可以了解更多信息?有关制作小书签的细微差别的资源似乎很少,而且我找不到任何相关内容。第二个问题是是否有任何已知的解决方法。

还有一些示例(请记住,要测试它们,只需将这些代码行复制到 Firefox 中的书签中。然后在任何页面上运行它们)。

重定向书签

javascript:!function(){window.okay={test:function(){}}}();

The project I'm working on

非重定向书签

javascript:!function(){window.okay={test:!0}}();

有什么想法吗?谢谢!

目前,我计划在 Knockout 中使用手动订阅来获得我需要的功能。不过,很高兴知道这个问题的答案。

最佳答案

它与暴露全局变量无关。它与您的小书签的最终评估值息息相关。

任何被评估的 JS 代码总是返回一个来自最后一行代码或最后一个 block 的值。

对我来说,在 Firefox 中,您的两个示例都重定向,因为它们都返回 true。您可以通过将代码直接粘贴到 Firefox 控制台来对此进行测试。

此外...

javascript:!function(){...}();

这很奇怪。我从未见过这种模式。

这是当今最常见的书签模式:

javascript:(function(){...})();

只要您不以 return 结束该匿名函数,该模式的计算结果为 undefined,并且不会发生重定向。

获得相同结果的旧方法是始终使用 void(0); 作为代码的最后一行。它的计算结果也为 undefined,如果它是最后一行,则整个脚本的计算结果为 undefined,并且不会发生重定向。

关于javascript - Firefox 小书签 : Exposing functions to the global namespace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20389517/

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