前バージョンの動作検証

前ページのバージョンでテストを行っていると、幾つか問題がある事が判りました。

 

① スマホ動画プレーヤーのボカシ背景非表示の動作が不安定で、表示されたままになる事が多い。

 

➁ スマホ動画プレーヤーの iframe内に、ブログページのHTMLに埋込む styleタグが埋込まれる。

 

以上の問題に関してコードを修正しました。

 

 

① の原因と対策 

iframe内の動画プレーヤーは、動的な書換えが頻繁に行われるらしく、要素に対するインラインの「style指定」は、一旦有効になっても、指定した要素が更新されて無効になるのではないかと思われます。

 

そこで確実な方法として、「styleタグ」を iframe内に埋込み、iframe内を修飾する様にしました。 これで、背景の非表示が確実になりました。

 

window.addEventListener('load', function(){
    let css=
        '<style id="ALJM" type="text/css">'+
        '#js-video-bg { filter: opacity(0) !important; }</style>';
    if(!document.querySelector('#ALJM')){
        document.documentElement.insertAdjacentHTML('beforeend', css); }});

 

下は、このコードが動画プレーヤーの iframe内に「id="ALJM"」の「styleタグ」を埋込んだ様子です。

 

 

 

➁  の原因と対策

これは、ブログページに適用するコードと、後から追加した iframe内に適用するコードを、動作域の区別なく共存させてしまったためです。

 

前バージョンから、スクリプトヘッダーは2個の「@match指定」を書き込んでいますが、本来は2個のスクリプトツールを同居させたもので、スクリプトの動作域の厳密な区別が必要でした。 以下のコードで2つのコードをラップして区別しました。

 

if(document.domain=='ameblo.jp'){ ~ ブログページのコード ~ }

if(document.domain=='static.blog-video.jp'){ ~ iframe内のコード ~ }

 

これで、無駄なコードが実行される事がなくなりました。

 

 

 

「Ameblo Lightbox JS Movie」を利用するには 

「Ameblo Lightbox JS Movie」(動画)の取扱い説明は、以下のページにあります。

 

 

このツールは Chrome / Edge / Firefox 版の「Tampermonkey」上で動作させる事が出来ます。

 

❶「Tampermonkey」を導入します

◎ 使用しているブラウザに拡張機能「Tampermonkey」を導入する事が必要です。

既に「Tampermonkey」を導入している場合は、この手順 ❶ は不要です。 

拡張機能の導入については、以下のページに簡単な説明があるので参照ください。

 

 

❷「Tampermonkey」にスクリプトを登録します

◎「Tampermonkey」の「」マークの「新規スクリプト」タブを開きます。

 

 

 

◎「新規スクリプト」には、最初からテンプレートが記入されています。 これは全て削除して、完全に空白の編集枠に 下のコードをコピー&ペーストします。

 

〔コピー方法〕 軽量シンプルなツール「PreBox Button   」を使うと

  コード枠内を「Ctrl+左Click」➔「Copy code 」を「左Click」

  の操作で、掲載コードのコピーが可能になります。

 

◎ 最後に「ファイル」メニューの「保存」を押すと、ツールが使用可能になります。

 

 

〔 Ameblo Lightbox JS Movie 〕ver. 0.6 (動画)

 

// ==UserScript==
// @name         Ameblo Lightbox JS Movie
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  ブログ掲載動画のウインドウ内の暗転拡大表示
// @author       Ameba Blog User
// @match        https://ameblo.jp/*
// @match        https://static.blog-video.jp/*
// @grant        none
// ==/UserScript==


if(document.domain=='ameblo.jp'){

    let target=document.querySelector('head');
    let monitor=new MutationObserver(catch_mov);
    monitor.observe(target, { childList: true });

    catch_mov();

    function catch_mov(){

        box_env3();

        function box_env3(){
            let css=
                '.mov_player { position: fixed; top: 0; left: 0; z-index: 5000; '+
                'padding: 10vh 2vw; width: 96vw !important; height: 80vh !important; '+
                'background: #000; box-shadow: 0 0 0 2px #000; border: none !important; '+
                'box-sizing: content-box !important; outline: none !important; } '+
                '.c_o { position: relative; } '+
                '.c_o:hover .pre_player { border: 5px solid #2196f3;  box-sizing: border-box; '+
                'outline: 1px solid #fff; outline-offset: -5px; } '+
                '.c_i { position: relative; top: 0; width: 100%; height: 100%; } '+
                '.c_i:hover { cursor: pointer; } '+
                '#close_header { position: fixed; top: 0; left: 0; z-index: 5001; '+
                'width: 100%; height: 60px; display: none; } '+
                '#close_header:hover #close_mov { opacity: 1; } '+
                '#close_mov { position: absolute; top: 20px; left: 30px; opacity: 0; '+
                'font: bold 21px Meiryo; padding: 5px 12px 1px; background: #fff; '+
                'color: #000; border: 2px solid #000; border-radius: 6px; cursor: pointer; }';

            let style=document.createElement('style');
            style.setAttribute('id', 'light_style_y');
            style.textContent=css;
            if(!document.querySelector('#light_style_y')){
                document.body.appendChild(style); }

            let close=document.createElement('div');
            close.setAttribute('id', 'close_header');
            close.innerHTML='<p id="close_mov">✖ Close Movie</p>';
            if(!document.querySelector('#close_header')){
                document.body.appendChild(close); }}

        let y_iframe=document.querySelectorAll('#entryBody iframe[src*="youtube.com"]');
        for(let k=0; k<y_iframe.length; k++){
            cover_sw(y_iframe[k]); }

        let s_iframe=document.querySelectorAll('#entryBody iframe[src*="static.blog-video"]');
        for(let k=0; k<s_iframe.length; k++){
            cover_sw(s_iframe[k]); }

        let c_iframe=document.querySelectorAll('#entryBody iframe[src*="static-clipblog.blog-video"]');
        for(let k=0; k<c_iframe.length; k++){
            cover_sw(c_iframe[k]); }


        function cover_sw(video){
            let cover_out=document.createElement('div');
            cover_out.setAttribute('class', 'c_o');
            if(video.parentNode.className!='c_o'){
                cover_out.appendChild(video.cloneNode(true));
                video.parentNode.replaceChild(cover_out, video);
                let cover_in=document.createElement('div');
                cover_in.setAttribute('class', 'c_i');
                cover_out.appendChild(cover_in); }}


        document.addEventListener('keydown', (event)=>{
            if(event.ctrlKey){
                box_view(); }});

        document.addEventListener('keyup', (event)=>{
            if(!event.ctrlKey){
                cover_off(); }});

        let amb_header=document.querySelector('#ambHeader');
        let html_=document.querySelector('html');

        function box_view(){
            let cover=document.querySelectorAll('.c_i');
            for(let k=0; k<cover.length; k++){
                cover[k].style.position='absolute';
                let player=cover[k].previousElementSibling;
                if(player){
                    player.classList.add('pre_player'); }

                cover[k].onclick=function(event){
                    event.stopImmediatePropagation();
                    let player=cover[k].previousElementSibling;
                    if(player){
                        player.classList.add('mov_player');
                        amb_header.style.zIndex=0;
                        zoom_reset(player); }
                    let close_header=document.querySelector('#close_header');
                    if(close_header){
                        html_.style.overflow='hidden';
                        close_header.style.display='block';
                        zoom_reset(close_header); }
                    normal_view(); }}}

        function zoom_reset(player){
            let zoom_f=window.getComputedStyle(document.body).getPropertyValue('zoom');
            if(zoom_f || zoom_f!=1){ // bodyで拡大ツールによるのzoom指定がある
                player.style.zoom=1/zoom_f; }}

        function normal_view(){
            let close_header=document.querySelector('#close_header');
            let close_mov=document.querySelector('#close_mov');
            if(close_header && close_mov){
                close_mov.onclick=function(){
                    html_.style.overflow='visible';
                    amb_header.style.zIndex=2000;
                    close_header.style.display='none';
                    let m_iframe=document.querySelectorAll('#entryBody iframe');
                    for(let k=0; k<m_iframe.length; k++){
                        if(m_iframe[k].classList.contains('mov_player')){
                            m_iframe[k].classList.remove('mov_player'); }}}}}

        function cover_off(){
            let cover=document.querySelectorAll('.c_i');
            for(let k=0; k<cover.length; k++){
                cover[k].style.position='relative'; }
            let pre_player=document.querySelectorAll('.pre_player');
            for(let k=0; k<pre_player.length; k++){
                pre_player[k].classList.remove('pre_player'); }}

    } // catch_mov()

} // ameblo.jp



if(document.domain=='static.blog-video.jp'){

    window.addEventListener('load', function(){
        let css=
            '<style id="ALJM" type="text/css">'+
            '#js-video-bg { filter: opacity(0) !important; }</style>';
        if(!document.querySelector('#ALJM')){
            document.documentElement.insertAdjacentHTML('beforeend', css); }});

} // static.blog-video.jp

 

 

 

「Ameblo Lightbox JS Movie」最新版について 

旧いバージョンの JavaScriptツールは、アメーバのページ構成の変更で動作しない場合があり、導入する場合は最新バージョンをお勧めします。

 

●「Ameblo Lightbox JS Movie」の最新バージョンへのリンクは、以下のページのリンクリストから探せます。