In JavaScript, how can I open a page in a new brow

2019-06-26 04:07发布

Why does the following JavaScript script open a new window, but fails to scroll down the page? (Note that I ran this script in the Web Console in Firefox 4.)

w=window.open("http://stackoverflow.com");w.scrollTo(0,150);

How can I open a page in a new browser window and instruct that window to scroll to a specific position?

5条回答
祖国的老花朵
2楼-- · 2019-06-26 04:43

If you own both domains, you can use window.postMessage to communicate the scroll position to the other window.
In one page you make the postMessage, and in the other you add an event listener.

If you need to support older browsers, you can use window.name to transfer some data between windows.

If you don't own both domains, you're out of luck, due to the SOP. It is a built-in protection in browsers to avoid cross domain abuses.

查看更多
该账号已被封号
3楼-- · 2019-06-26 04:48

Derek is correct about the cross-domain security preventing you from doing this. So one answer is to disable the domain security by loading chrome: Chrome --disable-web-security This from THIS chrome instance, run your javascript. The child windows will inherit the load switch and your scrollTo will now work.

查看更多
狗以群分
4楼-- · 2019-06-26 04:54

You're trying to scroll before the window is ready. Notice that the following works:

w=window.open("http://stackoverflow.com");
setTimeout(function() { w.scrollTo(0,150) }, 1000);

It would be best to execute the scroll in a w.onload or DOM ready function, but I can't seem to get that to work.

查看更多
萌系小妹纸
5楼-- · 2019-06-26 04:57

The script does not work because it breaches cross-domain security. See this and this. Chrome reports a similar error:

> w=window.open("http://stackoverflow.com");
DOMWindow
84Unsafe JavaScript attempt to access frame with URL http://stackoverflow.com/ from frame with URL chrome://newtab/. Domains, protocols and ports must match.
> w.scrollTo(0,150);
89Unsafe JavaScript attempt to access frame with URL http://stackoverflow.com/ from frame with URL chrome://newtab/. Domains, protocols and ports must match.
TypeError: Object [object DOMWindow] has no method 'scrollTo'
查看更多
看我几分像从前
6楼-- · 2019-06-26 05:05

I found something interesting on this...

I've always known you can scroll to an anchor with a name -- in fact, that's the way we were all taught. But I just tried to scroll to a div with an id and it worked!

So, for example, if the target page has a div with id="bobo" then the link http://www.example.com/index.php/home#bobo just worked for me.

Perhaps it's flaky behavior on my end. I feel like I would have heard of this before if it were possible. But all I know is I was trying to do the same thing and for whatever reason it's working.

FWIW, the link I'm using is http://www.religionnews.com/index.php?/rnsblog#blog

查看更多
登录 后发表回答