Это происходит потому, что вы вычисляете выражение, а не вызываете метод.
parent.location.href = "http://www.google.com";
Если мы переместим его в явную функцию, мы больше не увидим поведение:
<a href="javascript:void(parent.location.href = 'http://www.google.com')">test link</a>
Но, конечно, нет причин использовать JS для этого конкретного случая:
<a href="http://www.google.com/" target="_parent">test link</a>
А если бы и было, мы все равно должны грациозно деградировать:
<a href="http://www.google.com/" target="_parent">test link</a>
<script type="text/javascript">
var links = document.getElementsByTagName('a');
for(var i=0;i<links.length;i++) {
if(links[i].target == '_parent') {
links[i].onclick = handleParentClick;
}
}
function handleParentClick(e) {
var sender = e ? (e.target || e) : window.event.srcElement;
parent.location.href = sender.href;
return false;
}
</script>