Javascript 在现有网站上自动滚动

Javascript 在现有网站上自动滚动,javascript,html,Javascript,Html,因此,我有一些代码,使网页自动横向滚动,这在我创建网页时起作用,但是当我尝试打开现有网页,然后运行脚本时,什么都没有发生,请有人解释我需要做什么,我只想能够打开脚本,为了让它打开网页并开始前后滚动,如果有帮助的话,它可以在canban板上显示不同的工作项 这是我到目前为止所拥有的: 窗口打开(“https://www.bbc.co.uk/news"); var=true; var scrollbarPosition=0; var pageWidth=getWidth(); 函数scrollW

因此,我有一些代码,使网页自动横向滚动,这在我创建网页时起作用,但是当我尝试打开现有网页,然后运行脚本时,什么都没有发生,请有人解释我需要做什么,我只想能够打开脚本,为了让它打开网页并开始前后滚动,如果有帮助的话,它可以在canban板上显示不同的工作项

这是我到目前为止所拥有的:


窗口打开(“https://www.bbc.co.uk/news");
var=true;
var scrollbarPosition=0;
var pageWidth=getWidth();
函数scrollWin()
{
var scrollDirection='右';
var pageWidth=getWidth();
这是真的;
函数f()
{
如果(需要)
{
如果(滚动条位置==0)
{
scrollDirection='右'
}
如果(滚动条位置==100)
{
滚动方向='左';
}
如果(scrollDirection=='Right')
{
scrollTo(window.scrollX+1,0);
滚动条位置++;
}
如果(滚动方向=‘左’)
{
scrollTo(window.scrollX-1,0);
滚动条位置--;
}
设置超时(f,30);
//刷新
//如果(滚动X==50)
//{
//滚动到(0,0);
//location.reload();
//	
//设置超时(f,3000);
//scrollWin();
//}
}
}
f();
}
函数getWidth(){
返回Math.max(
document.body.scrollWidth,
document.documentElement.scrollWidth,
document.body.offsetWidth,
document.documentElement.offsetWidth,
document.documentElement.clientWidth
);
}

据我所知,您希望通过javascript打开一些网站
example.com
,其内容可以水平滚动

解决方案: 您需要将新打开的窗口指定给一个变量,以便在打开后可以对其进行操作

var newWindow = window.open('http://example.com');
要进行操作,请将此
newWindow
变量用作
window
对象,如下所示:

newWindow.scrollTo(newWindow.scrollX + 1, 0);
function getWidth(win) {
  return Math.max(
    win.document.body.scrollWidth,
    win.document.documentElement.scrollWidth,
    win.document.body.offsetWidth,
    win.document.documentElement.offsetWidth,
    win.document.documentElement.clientWidth
  );
}
另外,您的
getWidth()
函数需要如下更改:

newWindow.scrollTo(newWindow.scrollX + 1, 0);
function getWidth(win) {
  return Math.max(
    win.document.body.scrollWidth,
    win.document.documentElement.scrollWidth,
    win.document.body.offsetWidth,
    win.document.documentElement.offsetWidth,
    win.document.documentElement.clientWidth
  );
}
您可以猜到,
scrollWin()
函数也需要以同样的方式进行更改

附注1 如果打开的窗口的域与运行javascript的域不同,则
window.open()
返回的
window
对象将无法访问

也就是说,如果您的javascript被加载到一个像
yoursite.com
这样的站点上,并且您打开了另一个像
var newWindow=window.open>这样的域http://example.com“)
,则您无法访问
新窗口.document
对象,或该
窗口
对象的任何属性,即您的
getWidth()
函数将失败,scrollWin()也将失败

例如,在此页面的console中尝试以下代码:

var newWindow = window.open('http://google.com');
alert(newWindow.body.scrollWidth);
将引发以下错误:

Uncaught DOMException: Blocked a frame with origin "https://stackoverflow.com" from accessing a cross-origin frame.
附注2

如果您在同一个域上使用它,则需要考虑以下事项:

var newWindow=window.open('http://yoursite.com)
,如果您像
newWindow.document.documentElement.offsetWidth
那样立即访问它,您可能会得到不想要的结果,因为新窗口的内容可能仍在加载中

因此,
if(newWindow.document.readyState=='complete')
检查可能有助于以后运行滚动代码


我已经尽可能地清楚,请随时询问任何澄清。

当您在一个不横向扩展的网页上运行此操作时,您预计会发生什么情况?我希望什么也不会发生.“消息”:“未捕获的语法错误:意外的标记嗨,Jay,谢谢你的回复,我只设法争取到时间来尝试这个,我一直在尝试一块一块地构建它,但即使这样似乎也不会使页面向下滚动:var newWindow=window.open(“);如果(newWindow.document.readyState=='complete'){newWindow.scrollTo(0110);}我还尝试添加一个setTimeout来调用一个持有scrollTo函数的函数,但这也不起作用:/@KyleMann你仔细阅读了注释1了吗?如果您在bbc.co.uk以外的网站上执行此操作,则此操作无效!检查javascript控制台中的错误消息。我想你不是在开发bbc.co.uk的
页面吧?对不起,我不知道你的意思,因为我刚刚开始做这样的事情,也许我做错了,但到目前为止,我所拥有的只是一个用notepad++编辑的HTML文档,我所拥有的只是我之前评论中的代码,这样它可以打开页面并滚动到一个位置,我不是托管网站,我只是想在现有网站上运行它。但是在正确阅读了注释1之后,也许你不能这样做,我认为有一种方法可以将代码注入到现有的网站中,请让我知道我是否还远,因为我只是一个初学者!:)你说得对,你不能这么做。这是现代浏览器中的一项安全功能。您不能将任意代码插入您无法控制的网页。克服这一问题的唯一方法是让自己成为一个可以关闭此功能的浏览器。好的,没问题,我将不得不考虑其他使用方法,谢谢你的建议Jay:)