<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>影片循環 &#8211; 小豬日常</title>
	<atom:link href="https://piglife.tw/tag/%E5%BD%B1%E7%89%87%E5%BE%AA%E7%92%B0/feed/" rel="self" type="application/rss+xml" />
	<link>https://piglife.tw</link>
	<description>Hello World，一個紀錄生活與學習的地方</description>
	<lastBuildDate>Fri, 26 Dec 2025 22:20:41 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://piglife.tw/wp-content/uploads/2017/10/cropped-logo-1-32x32.png</url>
	<title>影片循環 &#8211; 小豬日常</title>
	<link>https://piglife.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>修正 YouTube 影片循環播放的 iframe 參數設定技巧</title>
		<link>https://piglife.tw/technical-notes/youtube-iframe-loop-fix/</link>
					<comments>https://piglife.tw/technical-notes/youtube-iframe-loop-fix/#respond</comments>
		
		<dc:creator><![CDATA[小豬]]></dc:creator>
		<pubDate>Fri, 26 Dec 2025 22:20:41 +0000</pubDate>
				<category><![CDATA[技術筆記]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[YouTube]]></category>
		<category><![CDATA[前端優化]]></category>
		<category><![CDATA[影片循環]]></category>
		<guid isPermaLink="false">https://piglife.tw/technical-notes/youtube-iframe-loop-fix/</guid>

					<description><![CDATA[本篇介紹如何透過 JavaScript 自動修正 YouTube iframe 的 URL 參數，確...]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">前言</h2>
<p>在網頁中嵌入 YouTube 影片時，若希望影片能夠無限循環播放，通常需要在 iframe 的 URL 中加入特定參數。這段程式碼解決了直接設定 loop 參數無法生效的問題，適合需要動態調整或修正第三方影片嵌入參數的前端工程師與自學者。</p>
<h2 class="wp-block-heading">問題背景與解決方案</h2>
<p>YouTube 的 iframe 影片循環播放並非只靠 <code>loop=1</code> 參數即可生效，還必須同時指定 <code>playlist</code> 參數為影片 ID。這段程式碼會自動偵測所有帶有 <code>youtube-loop</code> 類別的 iframe，並補上正確的 <code>loop</code> 與 <code>playlist</code> 參數。</p>
<h3 class="wp-block-heading">取得並解析 iframe 的 src</h3>
<p>程式碼先取得所有符合條件的 iframe，並將 <code>src</code> 中可能被轉譯的 <code>&amp;amp;</code> 轉回 <code>&amp;amp;</code>，確保 URL 正確解析。</p>
<pre><code class="lang-javascript language-javascript javascript">const rawSrc = iframe.getAttribute(&#039;src&#039;);
const src = rawSrc.replace(/&amp;amp;/g, &#039;&amp;&#039;);</code></pre>
<h3 class="wp-block-heading">取得影片 ID</h3>
<p>透過字串切割方式，從 src 中擷取影片 ID，這是設定 playlist 參數的關鍵。</p>
<pre><code class="lang-javascript language-javascript javascript">const videoId = src.split(&#039;/embed/&#039;)[1]?.split(&#039;?&#039;)[0];</code></pre>
<h3 class="wp-block-heading">設定 loop 與 playlist 參數</h3>
<p>利用 URL 物件操作，設定 <code>loop=1</code> 與 <code>playlist=影片ID</code>，並避免重複設定造成無限迴圈。</p>
<pre><code class="lang-javascript language-javascript javascript">const url = new URL(src);
url.searchParams.set(&#039;loop&#039;, &#039;1&#039;);
url.searchParams.set(&#039;playlist&#039;, videoId);
const newSrc = url.toString();
if (newSrc !== src) iframe.setAttribute(&#039;src&#039;, newSrc);</code></pre>
<h2 class="wp-block-heading">實務應用與優化建議</h2>
<ul>
<li>此方法適合在頁面載入後或動態插入 iframe 後呼叫，確保所有影片都能正確設定循環播放。</li>
<li>透過多次延遲呼叫（setTimeout）處理 builder 或 lazy load 產生的 iframe。</li>
<li>若有大量 iframe，可考慮改用 MutationObserver 監控 DOM 變化，提高效能與即時性。</li>
</ul>
<h2 class="wp-block-heading">常見問題與坑點</h2>
<ul>
<li>直接在 iframe URL 加 <code>loop=1</code> 不加 <code>playlist</code>，影片不會循環。</li>
<li>URL 中的 <code>&amp;amp;</code> 需先轉回 <code>&amp;amp;</code>，否則 URL 解析會錯誤。</li>
<li>避免重複設定 src，否則會造成 iframe 不斷重新載入。</li>
</ul>
<h2 class="wp-block-heading">完整程式碼</h2>
<pre><code class="lang-javascript language-javascript javascript">(function () {
  function fixYouTubeLoop() {
    document.querySelectorAll(&#039;iframe.youtube-loop&#039;).forEach((iframe) =&gt; {
      const rawSrc = iframe.getAttribute(&#039;src&#039;);
      if (!rawSrc) return;

      // 你的 src 可能含有 &amp;amp;，先轉回正常的 &amp;
      const src = rawSrc.replace(/&amp;amp;/g, &#039;&amp;&#039;);

      if (!src.includes(&#039;youtube.com/embed/&#039;)) return;

      const videoId = src.split(&#039;/embed/&#039;)[1]?.split(&#039;?&#039;)[0];
      if (!videoId) return;

      const url = new URL(src);
      url.searchParams.set(&#039;loop&#039;, &#039;1&#039;);
      url.searchParams.set(&#039;playlist&#039;, videoId);

      const newSrc = url.toString();

      // 避免無限重設
      if (newSrc !== src) iframe.setAttribute(&#039;src&#039;, newSrc);
    });
  }

  document.addEventListener(&#039;DOMContentLoaded&#039;, fixYouTubeLoop);

  // 若是 builder / lazy load 後面才插入 iframe，再補一次
  setTimeout(fixYouTubeLoop, 800);
  setTimeout(fixYouTubeLoop, 2000);
})();</code></pre>]]></content:encoded>
					
					<wfw:commentRss>https://piglife.tw/technical-notes/youtube-iframe-loop-fix/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
