我有一些代码来保护我的页面不被iframed。
window.onload = function(){
try
{
if (window.parent && window.parent.location.hostname !== "app.herokuapp.com"){
throw new Error();
}
catch (e){
//do something
}
}
在我尝试添加更多值来比较主机名之前,它完全正常。我想添加自定义域名。我试过这个:
window.onload = function(){
try
{
if (window.parent && (window.parent.location.hostname !=="app.herokuapp.com"
|| window.parent.location.hostname !== "www.app.com"
|| window.parent.location.hostname !== "localhost")){
throw new Error();
}
catch (e){
//do something
}
}
这总是返回true,因此会抛出错误。我怎样才能做到这一点?除非主机名匹配这些字符串,否则我想抛出一个错误,无论如何都会抛出错误。我是新手,非常乐意帮忙!谢谢。
聚苯乙烯。我添加了“localhost”,因为我希望能够在推送到heroku之前在本地测试它。
答案 0 :(得分:6)
||
,则 true
会将结果评估为true
。也许您的意思是使用&&
代替:
if (window.parent
&& window.parent.location.hostname !== "app.herokuapp.com"
&& window.parent.location.hostname !== "www.app.com"
&& window.parent.location.hostname !== "localhost")
if (window.parent
&& !(window.parent.location.hostname === "app.herokuapp.com"
|| window.parent.location.hostname === "www.app.com"
|| window.parent.location.hostname === "localhost"))
如果操作数的所有评估为true
,则评估为true
。
进一步阅读
答案 1 :(得分:0)
由于已经有一个非常完整的答案,我建议采用不同的方法。当你有这样的长语句时,我发现使用高阶函数更容易阅读。以这种方式考虑您的情况:“检查主机名是否与任何给定的字符串不匹配”。这就是我想要阅读代码的方式,其他一切都是样板文件:
function not(y) {
return function(x) {
return x !== y;
};
}
var hosts = ['app.herokuapp.com','www.app.com','localhost'];
var parent = window.parent;
if (parent && hosts.some(not(parent.location.hostName))) {
...
}