Javascript 代码在JSFIDLE中工作,但在浏览器中抛出错误
您好,如果浏览器是在禁用的web安全模式下打开的,那么以下代码在Chrome浏览器上的JSFIDLE上运行良好。 我已将脚本放在document.ready处理程序中,但浏览器抛出以下错误:“getData未定义”: 在调试器中,以下是代码中断以引发错误的位置: 以下是我的HTML代码:Javascript 代码在JSFIDLE中工作,但在浏览器中抛出错误,javascript,jquery,html,jsfiddle,Javascript,Jquery,Html,Jsfiddle,您好,如果浏览器是在禁用的web安全模式下打开的,那么以下代码在Chrome浏览器上的JSFIDLE上运行良好。 我已将脚本放在document.ready处理程序中,但浏览器抛出以下错误:“getData未定义”: 在调试器中,以下是代码中断以引发错误的位置: 以下是我的HTML代码: <html> <body> <iframe src="https://news.ycombinator.com/" width="800" height="500"
<html>
<body>
<iframe src="https://news.ycombinator.com/" width="800" height="500" id="idframe"></iframe>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script>
$(function() {
debugger;
var iframe = document.getElementsByTagName('iframe')[0];
iframe = document.getElementById('idframe');
var url = iframe.src;
var getData = function(data) {
if (data && data.query && data.query.results && data.query.results.resources && data.query.results.resources.content && data.query.results.resources.status == 200) loadHTML(data.query.results.resources.content);
else if (data && data.error && data.error.description) loadHTML(data.error.description);
else loadHTML('Error: Cannot load ' + url);
};
var loadURL = function(src) {
url = src;
var script = document.createElement('script');
script.src = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20data.headers%20where%20url%3D%22' + encodeURIComponent(url) + '%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=getData';
document.body.appendChild(script);
};
var loadHTML = function(html) {
iframe.src = 'about:blank';
iframe.contentWindow.document.open();
iframe.contentWindow.document.write(html.replace(/<head>/i, '<head><base href="' + url + '"><scr' + 'ipt>document.addEventListener("click", function(e) { if(e.target && e.target.nodeName == "A") { e.preventDefault(); parent.loadURL(e.target.href); } });</scr' + 'ipt>'));
iframe.contentWindow.document.close();
}
loadURL(iframe.src);
});
</script>
</body>
</html>
$(函数(){
调试器;
var iframe=document.getElementsByTagName('iframe')[0];
iframe=document.getElementById('idframe');
var url=iframe.src;
var getData=函数(数据){
if(data&&data.query&&data.query.results&&data.query.results.resources&&data.query.results.resources.content&&data.query.results.resources.status==200)加载HTML(data.query.results.resources.content);
else if(data&&data.error&&data.error.description)加载html(data.error.description);
else loadHTML('错误:无法加载'+url');
};
var loadURL=函数(src){
url=src;
var script=document.createElement('script');
script.src=http://query.yahooapis.com/v1/public/yql?q=select%20*%20来自%20data.headers%20其中%20url%3D%22'+encodeURIComponent(url)+'%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=getData';
document.body.appendChild(脚本);
};
var loadHTML=函数(html){
iframe.src='about:blank';
iframe.contentWindow.document.open();
iframe.contentWindow.document.write(html.replace(//i,'document.addEventListener(“单击”,函数(e){if(e.target&&e.target.nodeName==“A”){e.preventDefault();parent.loadURL(e.target.href);}}}});
iframe.contentWindow.document.close();
}
loadURL(iframe.src);
});
源代码'https://news.ycombinator.com/“
您正试图加载到iframe的内容禁止与使用HTTP响应头X-Frame-Options
的iframe一起使用,该头设置为DENY
。因此它永远无法在iframe中加载
这样做是出于安全原因,以防止类似的威胁
(点击劫持)
(跨站点请求伪造)
小提琴也不能正常工作,并在控制台中抛出相同的错误。语法如下:if(condition){return}else if(condition){return}else{return}。也许这就是问题所在。@AivarasP可能就是。因为我尝试只使用loadHTML运行它(“错误:无法加载页面”);在getData内部,但不知怎的,这个消息没有显示在iframe中!这把小提琴对我有用。不过,您可以尝试在禁用的web安全模式下加载小提琴。事实上,小提琴是我为克服“X-Frame-Options禁止显示”问题找到的解决方案