当我输入window
控制台时。控制台显示window
是Window
. 是否可以使用new Window()
. 我试过了,但它抛出错误TypeError: Illegal constructor
我的问题与Location
对象有关。我可以使用创建一个新对象Location
吗?我需要它,以便我可以将location
对象上可用的方法应用于我的链接。
我试图访问 Location 对象但没有成功。
我正在使用Chrome console
.
当我输入window
控制台时。控制台显示window
是Window
. 是否可以使用new Window()
. 我试过了,但它抛出错误TypeError: Illegal constructor
我的问题与Location
对象有关。我可以使用创建一个新对象Location
吗?我需要它,以便我可以将location
对象上可用的方法应用于我的链接。
我试图访问 Location 对象但没有成功。
我正在使用Chrome console
.
尝试使用Location
来操作任意 URI 将无法正常工作。Location
对象/类型不是一般的URI 容器,而是与 DOM 及其导航状态的特殊约定。
我通过谷歌 YMMV找到了 webr3 的这个 URI JavaScript 类型:
JavaScript 的 URI 类型
- 支持各种 URI(URL、URN、任何方案)。
- 相对 URI 解析
- 所有类都扩展了本机 String 实现。
- URI 规范的纯 ECMA-262 实现 (RFC-3986)
- 工作客户端或服务器端,(V8 / node.js 兼容)。
尽管这个问题已经很老了,但无论如何将答案发布为使用本机 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: ""
}
使用前请检查兼容性。
我希望这个解决方案对你有用。
不,你不能。一个浏览器窗口有一个 的实例,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');
</p>
将对象想象window
为单例。您不能创建它的新实例。这意味着什么?一个新的Window
内部Window
会是什么?它与 a 的location
对象类似Window
。每个Window
都有一个location
,但Window
不能同时在两个location
s 中。
修改location
一个Window
用途:
window.location.href = "http://www.google.com";
要创建一个新的(子)Window
——一个弹出窗口——使用对象的open
方法window
:
window.open('http://www.example.com');
要更改链接的“位置”,请修改链接的href
属性。例如,要修改 HTML 链接:
<a href="http://www.google.com" id="mylink">Visit Website</a>
... 采用 ...
document.getElementById("mylink").href = "http://www.yahoo.com";
不,您不能自己创建新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'
它甚至会在您可以侦听的 URL 更改时发出事件:
x.on('change', function(){
console.info(this.href);
})
x.href= 'https://stackoverflow.com' // > 'https://stackoverflow.com'
它可以在 Node 和浏览器上运行,但是由于它的体积很小,所以没有单独的 Web 下载;使用 Webpack 或 Browserify 将它包含在你的包中。
根据您需要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,
};