javascript - 使用 Javascript 控制 iFrame 的导航而不应用 src 属性

标签 javascript html iframe

因此,我正在制作一个页面,该页面允许我呈现外部页面,以便我可以开始定期操作数据并刷新内容(理想情况下,这不是这个目的)。

所以我的问题是我有一些 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 中的内容,由于跨来源安全性,您也无法更改其 src。最好的选择是为 iframe 指定一个名称,然后使用 window.open(URL,iframeName)。

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

在 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
    }
}

关于javascript - 使用 Javascript 控制 iFrame 的导航而不应用 src 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25592186/

相关文章:

javascript - 某些 HTML 不希望在 IE 中显示/隐藏。为什么?

javascript - 使 iframe 占用垂直空间

javascript - 在 React 中,有没有办法更改选中的单选输入上父 Label 标签的背景颜色?

java - list 文件中需要哪些权限才能让小程序通过 Javascript 进行通信

javascript - Next.js:如何从当前子页面转到父页面?

html - 处理输入 :focus + label in css

c# - 从 Internet Explorer 渲染图像

javascript - 检测 iframe 何时从跨域站点返回

javascript - 如何判断iframe的位置是否发生变化?

javascript - 一旦应用程序在asp.net中正确运行,就可以防止返回