【问题标题】:Using Javascript to control navigation of iFrame not applying src property使用 Javascript 控制 iFrame 的导航不应用 src 属性
【发布时间】:2014-10-24 21:02:36
【问题描述】:

所以我正在制作一个允许我呈现外部页面的页面,这样我就可以开始定期操作数据和刷新内容(理想情况下,这不是什么)。

所以我的问题是我有一些 javascript 来调用页面以加载到我的 iframe,但是当我尝试将我的 url 应用到我的 iframe 的 src 属性时,它似乎没有粘住,并且没有外部页面负载。我一直在使用我自己的网站对此进行测试,因此该 url 位置不应有任何限制以防止其加载。我不确定页面是否需要重新加载(可能?)以使 iframe 更改其 src?如果是这样,我的想法将完全不可行,所以我希望这不是问题。到目前为止,这是我的代码:

<head>
<style>body{text-align:center;}#targetField{width:80%;margin:3px;}</style>
<script>
var frames = new Array();
var url;
function direct(url){
  frames = document.getElementsByTagName('iframe');//Obtain all iframe elements
  for(i=0;i<frames.length;i++){//For each frame      
    //IF the frames source element is blank or null
    if(frames[i].getAttribute('src') === null || frames[i].getAttribute('src') === 'null' || frames[i].getAttribute('src') === ''){
        frames[i].setAttribute('src', url);
    }
    else if(frames[i].getAttribute('src') === url){
      //IF the souce element already has a target and is SAME as url
      if(navigator.appName == 'Microsoft Internet Explorer'){
        //If IE then use reload()
        frames[i].contentWindow.location.reload(true);
      }
      else{
        //Otherwise set source to reload
        frames[i].src = frames[i].src
      }
    }
    else{}
  }
}
</script>
</head>
<body>
<form>
  <input id="targetField"></input>
  <button onclick="direct(document.getElementById('targetField').value);" value="submit">GO!!!</button>
</form>
<iframe id="iF01"></iframe></body></html>

如果可能的话,我宁愿使用纯 javascript 而不使用任何 jQuery,我只是不确定为什么我的调试控制台没有显示任何问题,但什么也没做。在 Chrome、FF 和 IE8 中测试。 JSFiddle 这里http://jsfiddle.net/77tx44od/2/

我现在也尝试过,但无济于事,创建一个新的 iFrame 以通过其 src 属性加载内容。

<script>
var frames = new Array();
var url;
var x = 0;
function direct(url){ 
  frames = document.getElementsByTagName('iframe');//Obtain all iframe elements
  for(i=0;i<frames.length;i++){//For each frame
    frames[i].parentnode.removeChild(frames[i]);
  }  
  var newFrame = document.createElement('iframe');
  newFrame.setAttribute('src', url);
  newFrame.setAttribute('id', 'iF'+x);
  document.body.appendChild(newFrame);
  x++;
}   
</script>

【问题讨论】:

  • 你有iframe[i],你应该有frames[i] - 这确实会在开发者控制台中产生错误。
  • 啊,愚蠢的我。不过没有出现在我的 chrome 控制台中,这很奇怪。

标签: javascript html iframe


【解决方案1】:

在加载来自不同来源的页面后,您无法查询 iframe 中的内容,也无法更改其 src,因为跨来源安全性。最好的办法是为 iframe 命名,然后使用 window.open(URL,iframeName)。

用一个新的 iframe 替换另一个 src 是一个想法。

在 iframe 中加载页面可能会被阻止 - 它很可能会尝试退出

这是一个替换版本:

FIDDLE

<form id="form1">
  <input id="targetField"></input>
  <button value="submit">GO!!!</button>
</form>
<div id="iframeDiv">
<iframe id="iF01"></iframe></div>

window.onload=function() {
    document.getElementById("form1").onsubmit=function() {
      document.getElementById("iframeDiv").innerHTML='<iframe src="'+this.targetField.value+'"></iframe>';
      return false; // cancel form submission
    }
}

【讨论】:

  • 如果 iFrame 正在被创建,并在附加到页面之前为其提供 src 属性,那么我只是用新的 iFrame 替换了 iFrame 而不是重新加载?虽然这仍然意味着我无法访问信息,la脚。
  • 也可能被标记为安全问题,Chrome 会创建该元素,然后在加载内容之前立即将其删除。
  • 在 OSX 上的 Chrome 中为我工作
  • 这个方法很好用,谢谢。我的回应是尝试 appendChild() 一个新的 iframe 元素,而不是使用 innerHTML 写入页面。一个问题,return false 的目的是什么;在函数中?
  • 不提交表单。
猜你喜欢
  • 2015-02-14
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多