Chrome扩展程序,scrollTop = 0

时间:2013-10-19 22:56:10

标签: javascript google-chrome google-chrome-extension scroll

我正在制作Chrome扩展程序。我在scrollTop上遇到了一些问题(我希望这是"得到滚动高度"!)。

第一:结构:我有清单,html页面,javascript和图片。

第二:目标。我试图向下滚动到底部,而不是转到顶部,然后重新启动以滚动到底部..循环。 在清单中我是这样的:

{
 "background": {
       "page": "scroll.html"
 },
 "browser_action": {
       "default_icon": "icon.png",
       "default_title": ""
 },
 "content_scripts": [ {
       "js": [ "scroll.js" ],
       "matches": [ "http://*/*", "https://*/*" ]
 } ],
 "description": "Auto Scroll. UpDownUp!",
 "icons": {
       "128": "icon.png",
       "48": "icon.png"
 },    
 "manifest_version": 2,    
 "name": "Auto Scroll, UpDownUp",    
 "permissions": [ "tabs", "http://*/*", "https://*/*" ],    
 "version": "0.2.3"
}

如你所见,我没有弹出任何HTML。

在我的html页面中我是这样的:

<html>
<head>
<title>Auto Scroll</title>
</head>
<body >
<script src="scroll.js"></script>
</body> 
</html>

在我的scroll.js中有几个函数,可以开始滚动和滚动更快。 但我不需要引用所有代码(164行)。

我只是浪费了很多钱,最后它只做了这么简单的事情:

chrome.tabs.update(id, {'url': 'javascript:document.body.scrollTop+=1;'});

我的扩展&#34;工作&#34;。但是我没有完成我想要的所有事情:

这个扩展只会下降(它确实!!)。我希望当我在页面底部时,扩展程序将执行:

chrome.tabs.update(id, {'url': 'javascript:document.body.scrollTop=0;'});

我想:

1)获得最大滚动高度,使用scrolltop检查,如果相同,请使用该代码。如果我这样做,扩展将始终位于顶部(稍微向下滚动),就好像这些值总是(!!)等于。

if(document.body.scollTop==document.body.Height)
{
chrome.tabs.update(id, {'url': 'javascript:document.body.scrollTop=0;'});
}

这是第一次尝试的结果......但是没有效果。

2)var y = document.body.scrollTop - &gt;滚动 - &gt; Z =的document.body.scrollTop。如果y == z,那么我在底部,然后转到顶部...这不起作用,y和z总是等于!!!

每次使用

时都会使用警报(值)
chrome.tabs.update(id, {'url': 'javascript:document.body.scrollTop+=1;'});

设为

alert(document.body.scollTop);

并弹出显示&#34; 0&#34;。总是...我关闭弹出窗口,扩展名向下滚动一点,然后弹出,再次出现0!

好的......我的错!?

我有一个想法:我的javascript是由后台页面加载的,javascript在浏览器的页面上运行,mybe,scrollTop命令给我后台页面高度......这真的很糟糕。 你能帮我找到办法吗?#34;活跃&#34;页面执行&#34; go-to-top&#34;功能!?

编辑:

我发现了一些东西,如果我使用这个

chrome.tabs.getSelected(null, function(tab) { 
    alert(tab.url);
})

一个窗口弹出我们告诉我acqual标签网址。看this我发现高度是标签属性,所以我使用:

    chrome.tabs.getSelected(null, function(tab) { 
    alert(tab.height);
})

但窗口弹出并说出&#34; undefined&#34; ....我真的不知道我要做什么来检索实际的标签滚动位置。

3 个答案:

答案 0 :(得分:1)

您似乎在混合背景页面代码和实际网页代码。

1肯定不会起作用,因为你要查询后台页面的值而不是实际网页的值(条件),然后在实际网页中执行代码(设置scrollTop)。

关于2 - 我不确定你的意思......

在背景页面中,在实际网页中执行JavaScript的正确方法是使用chrome.tabs.executeScript。或者你可以使用content script(你甚至可能不需要背景页面?)。

一旦确定在实际网页中而不是在后台页面中执行所有代码(用于查询和更改实际网页中的内容),您的代码通常都可以正常工作。

答案 1 :(得分:1)

终于解决了。 我设法做了两个函数:

function scrolla(){
    chrome.tabs.executeScript({code: 'var x= document.body.scrollTop; document.body.scrollTop+=1; var y=document.body.scrollTop; if(x==y){document.body.scrollTop=0;}'});
}

chrome.browserAction.onClicked.addListener(function(tab) {

      var start = setInterval(function(){scrolla()},10);

    });

这将滚动页面直到结束,而不是从顶部重新开始。 我非常难以做到这一点! HAHHA解决了!!!!

答案 2 :(得分:0)

1)你不应该使用tabs.update来注入javascript:urls - 而是使用tabs.executeScript来注入代码。 javascript:url不太安全,因为它们将代码直接注入到网页世界中,而executeScript将代码注入到内容脚本的单独世界中

2)您可以使用tabs.executeScript返回值 - 但前提是您运行的代码是同步的。只需在代码的最终语句中列出返回值(无返回关键字),例如chrome.tabs.executeScript(tabid,{code:"var a = 34; location.href;"},function(url){console.log(url)})会将location.href的值返回给回调函数。

3)您应该可以通过设置 elem .scrollTop = value 进行滚动。 value 的范围是0到 elem .scrollHeight。如果你不能使用document.body.scrollTop滚动,那么它可能是页面中需要滚动的不同元素。