0

有没有办法获取弹出窗口的 URL/位置?

代码:

<html>
   <head>
   <script>
   function openWin()
   {
      myWindow=window.open('http://www.google.com','','width=200,height=100');
      console.debug(myWindow.location.href);
      console.debug(window.location.href);
   }
   </script>
  </head>

  <body>
    <input type="button" value="Open window" onclick="openWin()" />
  </body>
</html>

第一个控制台打印about:blank

而第二个控制台打印当前页面的URL(即上面代码的URL,它不打印弹出窗口的URL)

为什么第一个控制台不打印位置(即http://www.google.com)?

谁能帮我解决这个问题?

提前致谢。

4

2 回答 2

1

因为浏览器安全性会阻止您从与脚本不在同一个域中的任何窗口获取 URL。因此,如果您的代码在 example.com 上运行,您将只能获取也在 example.com 上的任何窗口的 URL。

于 2013-06-04T13:51:12.047 回答
1

正如@Hg3 所说,您无法访问location.href. 返回一个空。myWindowwindow.openDOMWindow

但是,您可以覆盖window.open并维护已打开的所有窗口的简单数组。

//override window.open
var windows = [];
window._open = window.open;
window.open = function(url, name, params){
    windows.push(name, url);
    return window._open(url, name, params)
}
//function return href by name
function hrefByName(name) {
    var index=(windows.indexOf(name));
    return (index>-1) ? windows[index+1] : 'undefined';
}

//modified openWin function
function openWin(url, name) {
    var params='width=200,height=100';
    window.open(url, name, params);
    //test, ouput current url and the windows array
    console.log(hrefByName(name));
    console.log(windows);
}

测试标记:

<input type="button" value="google" onclick="openWin('http://google.com', 'google')" />
<input type="button" value="bing" onclick="openWin('http://bing.com', 'bing')" />
<input type="button" value="stackoverflow" onclick="openWin('http://stackoverflow.com', 'stackoverflow')" />

当然,我猜你有一个动态生成的 URL 的设置 - 只是构建随机名称或传递一个唯一的数字作为名称。

于 2013-06-04T14:12:33.273 回答