脚本不在页面加载,但从控制台工作

时间:2015-04-16 23:19:03

标签: javascript console referrer

我写了一个从ebay列出的iframe运行的脚本。它运行正常,它运行在$(document).ready()上,向远程服务器发送一个AJAX请求,获取一些信息,操作DOM成功'回调,一切都很完美...

但是,我添加了一段代码,它应该获取document.referrer,并从中提取一些关键字(如果存在)。具体来说,如果用户在ebay上搜索产品,并从结果中点击我的产品,该功能会提取他输入的关键字。

现在,问题是,该功能根本没有在页面加载上运行。看来它会阻止脚本到达那个部分。这是功能:

function getKeywords(){
    var index = window.parent.document.referrer.indexOf('_nkw');

    if (index >= 0){
        var currentIndex = index + 5;
        var keywords = '';
        while (window.parent.document.referrer[currentIndex] !== '&'){
            keywords += window.parent.document.referrer[currentIndex++];
        }
        keywords = keywords.split('+');

        return keywords;
    }
}

我尝试在它之后调用两个日志:

console.log('referrer: ' + window.parent.document.referrer);
console.log(getKeywords());

他们都没有工作。就像说到window.parent.document.referrer'部分,它完全停止。

但是,当我把它全部放在一个控制台中并运行它时,它完美地工作。它记录了正确的引荐来源和正确的关键字。

有人知道这里可能出现什么问题吗?

1 个答案:

答案 0 :(得分:0)

它在控制台上工作的原因是因为你的窗口对象是外部窗口引用,而不是你的iframe。除此之外,在控制台上:

window.parent === window
  // ==> true

所以,实际上你正在运行window.document.referrer而不是你的框架window.parent.document.referrer

如果你想访问你的框架的窗口对象你应该像

var myFrame = document.getElementsByClassName('my-frame-class')[0];
myFrame.contentWindow === window
  // ==> false
myFrame.contentWindow.parent.window === window
  // ==> true

这可能会帮助您调试问题,但我猜浏览器只是阻止内部iframe访问父窗口对象。