【问题标题】:Change default iframe src onclick and retain src after page refresh?页面刷新后更改默认 iframe src onclick 并保留 src?
【发布时间】:2018-02-27 14:16:36
【问题描述】:

我的页面上有以下 iframe 和缩略图。如何使用 javascript 以便在单击缩略图时,data-embed-src 成为 iframe 的默认 src?

<iframe name="starterVID" id="starterVID" width="870" height="498" src="https://www.youtube.com/embed/" frameborder="0" allowfullscreen scrolling="no"></iframe>
</li>

<li class="span9">
  <h3>Example</h3>
  <ul class="thumbnails">
    <li class="span3">
      <a class="thumbnail cboxElement" rel="colorbox" data-embed-src="http://player.vimeo.com/video/" href="http://vimeo.com/"><img src="https://i.vimeocdn.com/video/" alt="">Vid </a>
    </li>
    <li class="span3">
      <a class="thumbnail cboxElement" rel="colorbox" data-embed-src="http://player.vimeo.com/video/" href="http://vimeo.com/"><img src="https://i.vimeocdn.com/video/" alt="">Vid0 </a>
    </li>
    <!--      <li class="span3"><a class="thumbnail cboxElement" rel="colorbox" data-embed-src="http://player.vimeo.com/video/" href="https://vimeo.com/"><img src="https://i.vimeocdn.com/video/" alt="">Vid1</a></li>
    -->
    <li class="span3">
      <a class="thumbnail cboxElement" rel="colorbox" data-embed-src="http://player.vimeo.com/video/" href="https://vimeo.com/"><img src="https://i.vimeocdn.com/video/" alt="">Vid2</a>
    </li>
</li>
</ul>
<ul class="thumbnails">
  <li class="span3">
    <a class="thumbnail cboxElement" rel="colorbox" data-embed-src="https://www.youtube.com/embed/" href="http://www.youtube.com/watch"><img src="http://i4.ytimg.com/vi/" alt="">Vid3</a>
  </li>
  <li class="span3">
    <a class="thumbnail cboxElement" rel="colorbox" data-embed-src="http://player.vimeo.com/video/" href="https://vimeo.com/"><img src="https://i.vimeocdn.com/video/" alt="">Vid4</a>
  </li>
  <li class="span3">
    <a class="thumbnail cboxElement" rel="colorbox" data-embed-src="http://player.vimeo.com/video/" href="https://vimeo.com/"><img src="https://i.vimeocdn.com/video/" alt="">Vid5</a>
  </li>
  <li class="span3">
    <a class="thumbnail cboxElement" rel="colorbox" data-embed-src="https://goo.gl/"><img src="https://goo.gl/" alt="">Picture</a>
  </li>
</ul>

我使用以下 javascript 获得了最大的成功,但是由于我对这种方法没有太多的运气,所以我正在考虑尝试一种不同的方法:

<script type="text/javascript">
    function setIframeSource() {
       var theSelect = document.getElementById('choice');
       var theIframe = document.getElementById('starterVID');
       var theUrl;

       theUrl = theSelect.options[theSelect.selectedIndex].value;
       theIframe.src = theUrl;
    }
</script>
<script>
    function loadFrame(val, id){
        localStorage.setItem(val, id);

        if(typeof localStorage.getItem('starterVID') != 'undefined'){
          $('select').val(localStorage.getItem('starterVID'));
        }        
    }
</script>

【问题讨论】:

  • 您好 zxb413,在这里,您可以询问具体的编程问题,而不是其他人为您提供完整的工作代码。您需要展示您的努力并包含无法按您希望的那样工作的代码。作为提示,您每次都需要删除并添加一个带有新 src 的新 iframe。修改 src 不起作用。
  • 嘿@marekful,你想让我给你发我为此准备的3个不同的文件吗?我在上面花了很长时间,并发布了我正在使用的基本代码,以便其他人更容易破解它。不过感谢您的帮助。
  • 您只发布了 HTML 并寻求 javascript 功能。
  • 更好? @marekful

标签: javascript html css web frontend


【解决方案1】:

要检索data-attribute 的值,我相信你应该使用getAttribute()

getAttribute() 返回元素上指定属性的值。如果给定属性不存在,则返回的值将是null""(空字符串);

function setIframeSource(vid) {
  var vid = vid.getAttribute('data-source');
  var theIframe = document.getElementById('myframe');
  theIframe.src = vid;
}
body {
  display:flex;
  align-items:center;
  justify-content:space-around;
}
<p><a data-source="https://youtube.com/embed/t2ByLmLnYJ8" onclick="setIframeSource(this);return false;" href="https://youtube.com/embed/fORZASxZMEQ">Play Iframe video ?</a>
</p><iframe src="https://stackoverflow.com/questions/46289527/change-default-iframe-src-onclick" id="myframe"></iframe>
<p><a data-source="https://youtube.com/embed/fORZASxZMEQ" onclick="setIframeSource(this);return false;" href="https://youtube.com/embed/fORZASxZMEQ">Play astro video ?</a>
</p>

关于本地存储,你应该在加载时,检查是否有任何数据尚未使用,否则使用默认url。

例子

window.onload = function() {
  var loadvid = localStorage.getItem("test");
  if (loadvid) {//if anything retrieved
    setIframeSource('', loadvid);
  } else {// if empty yet
    var theIframe = document.getElementById("myframe");
    var defaultUrl = theIframe.getAttribute('data-src');
    theIframe.src = defaultUrl;
  }
};
function setIframeSource(vid, video) {
  if (!video) {// if not from onload or empty yet
    var video = vid.getAttribute("data-source");
  }
  var theIframe = document.getElementById("myframe");
  video = video.replace(/"/g, '');
  theIframe.src = video;
  if (vid) {// if from onclick , then store it
    localStorage.setItem("test", JSON.stringify(video));
  }
}

https://codepen.io/gc-nomade/pen/yzOVEL

【讨论】:

  • 非常感谢您的帮助,但我忘了提到即使在页面刷新后我也需要保留 src。
  • @zxb413 那是什么没用呢?捕获数据属性值或本地存储部分?因为你的脚本theSelect.options[theSelect.selectedIndex].value 不会像现在这样工作。那么您在哪里搜索要在本地存储中分配的视频? ...如果这些代码不是从其他地方复制/过去的,请澄清您的问题以及您失败的地方;)
  • 您的代码运行良好,我只需要在页面刷新时保留更改
  • @zxb413 到目前为止你尝试了什么?这段代码只是关于getattribute()的一个示例
猜你喜欢
  • 2015-07-29
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 2018-02-23
  • 2011-11-15
  • 2013-02-10
  • 1970-01-01
  • 2012-04-15
相关资源
最近更新 更多