我写了一个从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'部分,它完全停止。
但是,当我把它全部放在一个控制台中并运行它时,它完美地工作。它记录了正确的引荐来源和正确的关键字。
有人知道这里可能出现什么问题吗?
答案 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
访问父窗口对象。