我有一个Javascript,用于更改链接中的主机以匹配当前的开发/测试服务器。
以下是一个例子:
var ndomain = document.domain;
var mydomain = 'www.foo.com';
var alink = document.getElementsByTagName('a');
for (var i = 0; i < alink.length; i++) {
if (alink[i].href.length > 0){
if (alink[i].host.substr(0, mydomain.length) == mydomain){
alink[i].host = ndomain;
}
}
}
这会将对 http://www.foo.com/page.html 的引用更改为 http://level1.test.foo.com/page.html 。
这适用于我测试的每个浏览器,除了Safari(Mac或Win)。我搜索并搜索了有关原因的信息,而我最接近的原因是“同源政策”。
根据我对同源政策的理解,这应该有效,因为一切都在 foo.com 域下。 Safari是否会更严格,因为我要进入两级子域(例如 level1.test )?
有人可以建议为什么这个过程在Safari中不起作用,或者我如何让它在Safari中工作?
TIA!
答案 0 :(得分:0)
你在第5行遇到语法错误(3个左括号,只有2个右括号)。
答案 1 :(得分:0)
这与原始政策不应该有任何关系。
在Google Chrome中也可以看到相同的内容。两者都使用WebKit,因此WebKit DOM接口可能是解决问题的关键。
在Chrome中的问题中运行JS不会更改链接中的主机。 JS调试器和JS控制台都没有报告任何问题。
尝试更改anchor.host属性会导致:
这表明anchor.host属性由于某种原因是只读的。
anchor.href属性显示为可写,因此这可能是您的最佳选择。以下代码将工作:
var ndomain = document.domain;
var mydomain = 'www.foo.com';
var alink = document.getElementsByTagName('a');
for (var i = 0; i < alink.length; i++) {
if (alink[i].href.length > 0){
if (alink[i].host.substr(0, mydomain.length) == mydomain){
var currentHref = alink[i].getAttribute('href');
var newHref = '';
// Generate newHref based on currentHref and setting host as required
alink[i].setAttribute('href', newHref);
}
}
}