Bookmarklet在Opera中运行良好,但在Firefox中运行时,我会得到非常奇怪的结果



我写了这个bookmarklet:

javascript:var b = document.createElement("button");b.innerHTML = "Scroll to current video";b.addEventListener("click",() => doItYesly());b.style.position  = "fixed";b.style.left = 0;b.style.top = 0;b.style.zIndex = "99999999";document.body.prepend(b);var s = document.createElement("button");s.style.position  = "fixed";s.style.left = 0;s.style.top = "50px";s.style.zIndex = "99999999";s.innerHTML = "Set";s.addEventListener("click",() => localStorage.setItem("scrolldistanceforosautoscroller",window.scrollY));document.body.prepend(s);function doItYesly(){let inter = setInterval(() => {scrollTo(0,parseInt(localStorage.getItem("scrolldistanceforosautoscroller")));if(window.scrollY === parseInt(localStorage.getItem("scrolldistanceforosautoscroller"))){clearInterval(inter);}},100);}window

基本上,它是一个小书签,允许用户自动滚动到YouTube上一长串视频中的特定点。我为我的一个朋友写了这篇文章,他反复导航到同一个页面,想节省一些时间,避免每次想回到完全相同的位置时都必须手动滚动所有视频。

当我在浏览器中点击这个书签(我使用Opera(时,它运行得很好。当我在Firefox中打开同一个书签(他使用Firefox(时,它会将我重定向到一个页面,上面写着";该页面托管在您的计算机上";并且它简单地说CCD_ 1。这是因为,在Opera中,当我运行代码时,它会打印出";输入滚动距离";,因为最后一个表达式的求值结果为。为了解决这个问题,我简单地指向window对象,使最终表达式计算为页面本身。这解决了Opera的问题,但对于Firefox,它并没有解决这个问题。。。它不只是像往常一样呈现页面,而是简单地输出window对象的文本表示。。。

有办法解决这个问题吗?我想这是为了安全,如果是这样的话,那么可能没有变通办法。。。但也许我可以做些什么来让Firefox停止这种行为?

当我从开发控制台运行这个完全相同的代码时,它会像预期的那样完美地工作,只有当我把它保存为bookmarklet并点击它时,问题才会出现。有什么想法吗?

遗憾的是,由于";安全原因";。在Firefox或Chrome等其他浏览器中,您可以使用此bookmarklet模板将bookmarklet代码与现有JavaScript代码分离:

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

用您的代码替换CONTENTGOESHERE

最新更新