Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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-同源策略?_Javascript_Security_Safari - Fatal编程技术网

游猎及;Javascript-同源策略?

游猎及;Javascript-同源策略?,javascript,security,safari,Javascript,Security,Safari,我有一个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

我有一个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;
        }
    }
}
var ndomain=document.domain;
var mydomain='www.foo.com';
var alink=document.getElementsByTagName('a');
对于(变量i=0;i0){
if(alink[i].host.substr(0,mydomain.length)==mydomain){
alink[i].host=ndomain;
}
}
}
这将更改对的引用

除了Safari(Mac或Win)之外,我测试过的所有浏览器都可以使用它。我已经搜索了很多关于原因的信息,我找到的最接近的原因是“同一原产地政策”

根据我对同一原产地政策的理解,这应该有效,因为所有内容都在foo.com域下。Safari是否可以更严格地定义为两级子域(例如level1.test)

有人能告诉我为什么这个过程在Safari中不起作用,或者我如何让它在Safari中起作用吗


蒂亚

第5行出现语法错误(3个左括号,只有2个右括号)。

这与同源策略无关

谷歌Chrome也可以看到同样的情况。两者都使用WebKit,因此WebKit DOM接口可能是解决问题的关键

在Chrome中运行问题中的JS不会改变链接中的主机。JS调试器和JS控制台都不会报告任何问题

尝试更改anchor.host属性的原因:

  • 无需报告错误
  • anchor.host属性没有更改
这表明anchor.host属性出于某种原因是只读的

anchor.href属性看起来是可写的,因此这可能是您的最佳选择。以下代码将起作用:

var ndomain=document.domain;
var mydomain='www.foo.com';
var alink=document.getElementsByTagName('a');
对于(变量i=0;i0){
if(alink[i].host.substr(0,mydomain.length)==mydomain){
var currentHref=alink[i].getAttribute('href');
var newHref='';
//根据currentHref生成newHref并根据需要设置主机
alink[i].setAttribute('href',newHref);
}
}
}
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);
        }
    }
}