Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检索以前打开的窗口的URL?_Javascript_Browser_Browser History_Browser Tab - Fatal编程技术网

Javascript 如何检索以前打开的窗口的URL?

Javascript 如何检索以前打开的窗口的URL?,javascript,browser,browser-history,browser-tab,Javascript,Browser,Browser History,Browser Tab,我打开一扇窗户,就像这样: var w = window.open("", "window-name", opts); w.location.href = url; 然后,我使用一些动态数据创建一个URL,并将窗口设置为该URL,如下所示: var w = window.open("", "window-name", opts); w.location.href = url; 我的问题是,我需要检索之前设置到窗口的URL,以便稍后进行编辑。这样做行不通: var url = w.loca

我打开一扇窗户,就像这样:

var w = window.open("", "window-name", opts);
w.location.href = url;
然后,我使用一些动态数据创建一个URL,并将窗口设置为该URL,如下所示:

var w = window.open("", "window-name", opts);
w.location.href = url;
我的问题是,我需要检索之前设置到窗口的URL,以便稍后进行编辑。这样做行不通:

var url = w.location.href;
因为在我的情况下,这是一种安全违规行为,会引发一个异常

我不能将URL保存为“全局”变量,因为这需要跨页面工作。我不想使用cookies,因为当窗口关闭时,URL应该被重置。使用cookies会增加更多的复杂性,因为它迫使我在窗口关闭之前进行清理,并且增加了bug风险。我将把它作为最后的手段


在将窗口实例的URL设置为其他域上的某个内容后,是否有任何方法可以检索该URL?

浏览器不会告诉您以前访问过的其他域的URL的状态。这是出于安全考虑


如果您在同一个域上工作,也许您可以查询以获得所需的内容。或者,您可以通过LocalStorage或其他解决方案将访问的URL存储在客户端上。

使用
窗口。name
属性如下所示

var w = window.open('http://www.example.com', 'www.previousurlhere.com', opts);
然后,当新窗口打开时(假设它是您的),您可以从新窗口中抓取
窗口。name
数据,如

var previousUrl = window.name;

这应该可以做到。

如果不设置过期时间,则在窗口关闭时不需要清理cookie。这将设置cookie在浏览器会话结束时过期,以便浏览器为您清理cookie。在任何情况下,我唯一能想到的另一件事是使用服务器端会话变量在页面之间持久化url(例如,输出为js变量)。或者,您可以将url作为url=[url]参数传递给每个页面。但这也会很快变得一团糟。或者你也可以利用html5,虽然它是html5,所以可能不足以兼容you@CrayonViolent:每次关闭弹出窗口时,都必须清除cookie。我收集的数据应该只在弹出窗口打开时才保持,这就是为什么如果不是因为安全违规,将数据保存在窗口引用上会是完美的。但是,我应该如何从另一个浏览器页面检索窗口引用呢?我不能有一个动态生成的窗口名,它必须是像“我的弹出窗口”这样的静态名称。我担心我可能无法想象你的目标。似乎您要从弹出窗口中确定“谁是我的制作者?”因此我的建议是将制作者的名称(URL)放入
窗口的
name
属性中。open
函数。这样做意味着创建的每个弹出窗口都知道其制造商的名称。这不是目标吗?不,我不想确定弹出窗口的创建者,我只是想获取弹出窗口的当前URL。使用窗口的name属性来保存URL不是一种替代方法,因为名称必须是一个常量值。