使用 javascript 重命名 iframe

Renaming Iframes with javascript

我正在尝试弄清楚如何 name/rename iframe 与 javascript。

function sesamOpenU(){
  x = document.querySelector('iframe');
  x.style.height=  '200px';
  x.style.width= '400px';
  x.name = 'myFrame1' ;
  let url = 'https://www.example.com/'
  let other = window.open(url,'myFrame');
}
    
<iframe name ="myFrame">
</iframe>
<button onclick= "sesamOpenU()">Sesam, open U</button>

首先,我尝试在定义 x 后用 x.name 命名一个没有名称的 iframe。 控制台没有错误,但也没有结果。

我手动命名了 iframe 以定位它,它起作用了。 然后我尝试用 Javascript 重命名它,但还是没有结果。 为了排除问题,我决定调整高度和宽度作为参考,看看是否会调整。 确实如此。

功能前的调整都试过了,没有效果。 (宽度和高度有,名称没有)

有人可以解决我的问题吗?

编辑:是的,我知道我的目标是 myFrame,而不是示例中的 myFrame1。这是测试它会采取哪一个的最后一步。命名版本或重命名版本。命名版本有效,重命名版本无效(在新选项卡中打开网页) 编辑:已解决。

该代码确实重新分配了 iframe 的名称,但您设置源的方式似乎不起作用。

我尝试了以下似乎有效的方法:

function sesamOpenU(){
  x = document.querySelector('iframe');
  x.style.height=  '200px';
  x.style.width= '400px';
  x.name = 'myFrame1' ;
  let url = 'https://www.example.com/';
  x.src = url;
}
<iframe name ="myFrame">
</iframe>
<button onclick= "sesamOpenU()">Sesam, open U</button>

注意:您的代码在 SO 片段中不起作用,至少在我的系统上,它给出了这个错误:

js:26 Blocked opening 'https://www.alternate.nl/' in a new window because the request was made in a sandboxed frame whose 'allow-popups' permission is not set.

所以我把它作为一个完整的代码试过了,见下文。

重命名 iframe 效果很好 - 只要你返回一个 url 允许它自己在 iframe 中 - 不知何故你原来的 url 已经被一个替换了那行不通 - 以及 iframe 是否有另一个名称开头。也许我们错过了原始代码中的一些拼写错误?无论如何,一切都很好:

完整代码如下:

<!doctype html>
<html>
<head>
<title>Test iframe</title>
</head>
<body>
<iframe name='myFrame'></iframe>
    <button onclick= "sesamOpenU()">Sesam, open U</button>
    <script>
    function sesamOpenU(){
      x = document.querySelector('iframe');
      x.style.height=  '200px';
      x.style.width= '400px';
      x.name = 'myFrame1' ;
      let url = 'https://www.alternate.nl/'
      let other = window.open(url,'myFrame1');
    }
</script>
</body>
</html>

本地测试显示 Firefox 和 Chrome 之间存在差异 - Firefox 愉快地在 iframe 中打开提供给 window.open 的 url,其名称与作为第二个参数提供的浏览上下文同名. Chrome 没有并且会在新标签页中打开 url。

可能的解决方法是直接设置 iframe 元素的 src 属性:

function sesamOpenU(){
  x = document.querySelector('iframe');
  x.style.height=  '200px';
  x.style.width= '400px';
  x.name = 'myFrame1' ;
  let url = 'https://www.example.com/'
  // let other = window.open(url,'myFrame1');
  x.src = url;
}

这似乎在 Firefox 和 Chrome 中都有效,无论是使用 example.com 还是原始帖子中提供的商业网站 url。