在控制台中输入window
时。控制台显示window
是Window
的实例。是否可以使用new Window()
创建新的窗口对象。我试了但是它抛出错误 TypeError:非法构造函数
我的问题与Location
对象有关。我可以使用Location
创建新对象吗?
我需要它,以便我可以将location
对象上可用的方法应用于我的链接。
我试图访问Location对象但没有成功。
我正在使用Chrome console
。
答案 0 :(得分:4)
window
实例,窗口有一个location
。尝试创建window
或window.location
的多个实例似乎表明存在概念错误。
如果我理解你想要正确做什么,你应该创建一个anchor
元素用javascript操作:
var url = document.createElement('a');
url.href = "http://www.example.com/some/path?name=value#anchor";
var protocol = url.protocol;
var hash = url.hash;
alert('protocol: ' + protocol);
alert('hash: ' + hash);
或者,如果您已有锚,则可以使用
var url = document.getElementById('myanchorid');
答案 1 :(得分:3)
尝试使用Location
来操纵任意URI将不按需运行。 Location
对象/类型不是一般URI容器,而是具有DOM及其导航状态的特殊合同。
我通过谷歌,YMMV找到了这个URI JavaScript type by webr3:
javascript的URI类型
- 支持各种URI(URL,URN,任何方案)。
- 相对URI解析
- 所有类都扩展了本机String实现。
- URI规范的纯ECMA-262实现(RFC-3986)
- Works Client或Server端,(V8 / node.js兼容)。
答案 2 :(得分:2)
虽然这个问题已经过时了,但无论如何使用原生HTML Web API发布答案都被认为是一种很好的做法。
interface URL {
hash: string;
host: string;
hostname: string;
href: string;
readonly origin: string;
password: string;
pathname: string;
port: string;
protocol: string;
search: string;
username: string;
readonly searchParams: URLSearchParams;
toString(): string;
}
举个例子,
var url = new URL('http://localhost:8081/route1/route2?q=test#route3/route4');
为您提供以下对象 -
{
hash: "#route3/route4"
host: "localhost:8081"
hostname: "localhost"
href: "http://localhost:8081/route1/route2?q=test#route3/route4"
origin: "http://localhost:8081"
password: ""
pathname: "/route1/route2"
port: "8081"
protocol: "http:"
search: "?q=test"
searchParams: URLSearchParams {}
username: ""
}
使用前检查compatibility。
我希望这个解决方案对你有用。
答案 3 :(得分:1)
想象一下window
对象作为单身人士。您无法创建它的新实例。这是什么意思? Window
内的新Window
会是什么?它与location
的{{1}}对象类似。每个Window
都有Window
,但location
不能同时包含两个Window
。
修改location
使用的location
:
Window
要创建新的(子)window.location.href = "http://www.google.com";
- 弹出窗口 - 请使用Window
对象的open
方法:
window
要更改链接的“位置”,请修改链接的window.open('http://www.example.com');
属性。例如,要修改HTML链接:
href
...使用......
<a href="http://www.google.com" id="mylink">Visit Website</a>
答案 4 :(得分:1)
否,您无法自行创建新的Location
个对象。
然而,你可以非常接近。我构建了一个小型(~1kB)库,它提供了一个自定义Location
函数,其功能与标准Location
函数一样:
有了它,你可以像这样创建新的位置对象:
var x = new Location('https://joe:secret@example.com:8080/path?q=test#hash');
console.info(x.protocol); // > 'https:'
console.info(x.hostname); // > 'example.com'
console.info(x.port); // > '8080'
console.info(x.pathname); // > '/path'
console.info(x.search); // > '?q=test'
console.info(x.hash); // > '#hash'
创建的位置对象与window.location
对象或锚点的工作方式非常相似。如果您设置href
,则所有其他字段都会自动更新:
x.href = 'http://www.example.org/wow'
console.info(x.protocol); // > 'http:'
console.info(x.hostname); // > 'www.example.org'
console.info(x.port); // > ''
console.info(x.pathname); // > '/wow'
console.info(x.search); // > ''
console.info(x.hash); // > ''
每当您可以收听的网址发生变化时,它甚至会发出'change'
事件:
x.on('change', function(){
console.info(this.href);
})
x.href= 'https://stackoverflow.com' // > 'https://stackoverflow.com'
它既适用于Node,也适用于浏览器,但由于它的体积很小,因此没有单独的网页下载;使用Webpack或Browserify将它包含在您的包中。
答案 5 :(得分:0)
根据您需要的Location
来决定。
我使用以下代码为单元测试创建了Location
。
const windowLocation: Location = {
host: 'localhost:4200',
protocol: 'http:',
ancestorOrigins: null,
hash: null,
href: null,
hostname: null,
origin: null,
pathname: null,
port: null,
search: null,
assign: null,
reload: null,
replace: null,
};