分類
程式技術

iframe RWD化的方法(CSS only)

基本上, iframe 的 RWD 方法有很多種, 不過都需要在外層有個 div 來包裝出比例的尺寸, 才能達成 RWD化, 可以參考:

若只有 iframe tag 本身的話, 不在外層加裝 div 時, 如何達成呢? 可以利用這個 css 屬性: aspect-ratio

以 Youtube 的 embed code 為例:

<iframe width="560" height="315" src="https://www.youtube.com/embed/JtFI8dtPvxI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

我們將 iframe 設定以下屬性:

iframe {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
}

即可順利在不外加 div tag 的條件下, 將 iframe 本身保持指定比例(如 16:9)的 RWD化.

來看看範例吧:

https://codepen.io/timhuang/pen/BaYdMmN

至於這個 CSS 屬性 aspect-ratio 的支援性如何呢? 可以看一下 can i use 網站的資料囉:

https://caniuse.com/mdn-css_properties_aspect-ratio

看起來除了 IE 外, 其他主流瀏覽器都有支援呢.

分類
程式技術

在bootstrap下的影片responsive設定

在 bootstrap 下, image 可以很容易地使用 img-responsive class 進行 image 的 responsive 設定, 但是 embed 或是 video 如何處理呢?

在 bootstrap 3.2 起, 增加了好用的 embed-responsive 功能, 簡單說明語法如下:

<div class="embed-responsive embed-responsive-16by9">
    <iframe class="embed-responsive-item" src="//www.youtube.com/embed/ePbKGoIGAXY"></iframe>
</div>

在外部建立一個 div, 包含了 embed-responsive 與 embed-responsive-16by9 or embed-responsive-4by3 class, 然後在 video 或 iframe 包含 embed-responsive-item class, 就可以順利地讓 embed video 能有完整地 responsive 功能了.

參考範例:
http://codepen.io/ncerminara/pen/zbKAD/

分類
Javascript

Javascript的同一父網域下的crossdomain問題

今天在處理一個單純的 popup window (利用 window.open) 的子視窗, 在子視窗內進行 window.opener 的函數調用, 一般的狀況下, 都在同一網站(列如都在 www.foo.com)下沒有 cross domain 的問題, 但若是在兩個不同 domain 時(例如 www.foo.com 及 www.foo2.com), 就會有 cross domain 問題. 這個其實是一個單純的 security 問題.

不過若是今天是在同一家公司內的 cross domain, 例如 www1.foo.com 及 www2.foo.com 兩個 domain 下要執行這樣 cross domain 時, 是否能解決呢? 答案是肯定的, 其實和 cookie 域名共用設定方式相同, 上級域名共用的狀況下, 可以進行 document.domain 的設定以達成此項目的.

我們可以分別在 page1 在 www1.foo.com 及 page2 在 www2.foo.com 的網頁內 javascript 要執行 cross domain 指令前先執行

document.domain = "foo.com";

再繼續後續的程式碼即可, 這樣就不會有 cross domain 的問題囉.
不過也是有一些限制, 就是必須是在同樣的上級域名下, 才能使用, 而且也無法在 www1.foo.com 上將 document.domain 設定為 foo2.com 這樣的 domain, 這個原理其實和 cookie 的 domain 原理是相同的.

參考資料:
http://www.lhelper.org/tech/communicate_between_domains.html
http://www.cnblogs.com/xiaozhang/archive/2006/07/27/461306.html
http://www.mozilla.org/projects/security/components/same-origin.html
http://msdn2.microsoft.com/en-us/library/ms533028.aspx