1489658552 はてなブログでVisual Light Boxを動作させたいです。本当は添付画像のようになるはずなのですが、実際には以下のアドレスのようになってしまいます。「戻る」ボタンなどが表示されません。


http://weed-7777.sakura.ne.jp/image-light-box-witcher3/index_files/vlb_images1/c7bhr0jvaaapbll.jpg

コンソールを見ると、以下の箇所でコケています:

Uncaught TypeError: (intermediate value).visualLightbox is not a function
at HTMLDocument.<anonymous> (vlbdata1.js:1)
at c (jquery.js:3)
at Object.fireWith [as resolveWith] (jquery.js:3)
at Function.ready (jquery.js:3)
at HTMLDocument.H (jquery.js:3)

vlbdata1.jsを開けると、以下の「visualLightbox(...」の箇所に赤い波下線が引かれており、jQueryオブジェクトにvisualLightboxがアタッチされていません。

window.Lightbox = new jQuery().visualLightbox(...

ちなみにアタッチするjsは以下のものです:

http://weed-7777.sakura.ne.jp/video-light-box-witcher3/index_videolb/videolightbox.js

どうしたらいいのでしょうか?よろしくお願いします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2017/03/17 12:55:30
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:weed_7777

質問者から

Tats2017/03/17 10:59:34

Lightboxは動作するようです:はてなブログ(無料版)でLightboxとbxSliderを利用する - Flat Leon Works http://flat-leon.hatenablog.com/entry/hatenablog_lightbox_bxslid...

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント1000pt

Visual LightBox って、↓のやつで良いんでしょうか。
http://www.jqueryscript.net/demo/Awesome-Responsive-LightBox-Plugin-For-jQuery-VisualLightBox/demo/

visuallightbox.js をちらっと見てみましたけど、この書き方だと、これを読みこんだ後に jQuery が読み込まれると、動かないです(jQuery がリセットされちゃう)。
はてなブログでは、ページの末尾ではてなの方が設置した jQuery を読み込んでいる(この回答を書いている時点で、1.12.4)ので、visualLightbox メソッドが見つからない、とエラーになるんだと思います。

別の個所で タグの visuallightbox.js の読み込みを削除して、vlbdata1.js を以下のように書き換えると、動きそうな気がします(見づらいんで、整形してます)。

jQuery(document).ready(function() {
    var script = document.createElement("script");
    script.src = "http://weed-7777.sakura.ne.jp/image-light-box-witcher3/index_files/vlb_engine/visuallightbox.js";
    script.addEventListener("load", function() {
        window.Lightbox = new jQuery().visualLightbox({
            autoPlay: true,
            borderSize: 10,
            classNames: 'vlightbox1',
            descSliding: true,
            enableRightClick: false,
            enableSlideshow: true,
            prefix: 'vlb1',
            resizeSpeed: 7,
            slideTime: 4,
            startZoom: true
        });
    });
    document.body.appendChild(script);
});

パラメータは元のままです。
固定で script タグを書くのではなく、onload イベントで動的に visuallightbox.js を読み込んで、そのスクリプトの onload で window.Lightbox の設定を行えば、処理の順番がキープできるのではないか、と。

# スタイルの調整が必要になるかも、という気がしなくもないです

他5件のコメントを見る
id:weed_7777

うおおおおおおお、動いたあああああ!
a-kuma3さん最強っす。
本当にありがとうございました。

2017/03/17 12:55:16
id:a-kuma3

(・`ω´・) ウシッ

2017/03/17 13:49:55

その他の回答0件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154ここでベストアンサー

ポイント1000pt

Visual LightBox って、↓のやつで良いんでしょうか。
http://www.jqueryscript.net/demo/Awesome-Responsive-LightBox-Plugin-For-jQuery-VisualLightBox/demo/

visuallightbox.js をちらっと見てみましたけど、この書き方だと、これを読みこんだ後に jQuery が読み込まれると、動かないです(jQuery がリセットされちゃう)。
はてなブログでは、ページの末尾ではてなの方が設置した jQuery を読み込んでいる(この回答を書いている時点で、1.12.4)ので、visualLightbox メソッドが見つからない、とエラーになるんだと思います。

別の個所で タグの visuallightbox.js の読み込みを削除して、vlbdata1.js を以下のように書き換えると、動きそうな気がします(見づらいんで、整形してます)。

jQuery(document).ready(function() {
    var script = document.createElement("script");
    script.src = "http://weed-7777.sakura.ne.jp/image-light-box-witcher3/index_files/vlb_engine/visuallightbox.js";
    script.addEventListener("load", function() {
        window.Lightbox = new jQuery().visualLightbox({
            autoPlay: true,
            borderSize: 10,
            classNames: 'vlightbox1',
            descSliding: true,
            enableRightClick: false,
            enableSlideshow: true,
            prefix: 'vlb1',
            resizeSpeed: 7,
            slideTime: 4,
            startZoom: true
        });
    });
    document.body.appendChild(script);
});

パラメータは元のままです。
固定で script タグを書くのではなく、onload イベントで動的に visuallightbox.js を読み込んで、そのスクリプトの onload で window.Lightbox の設定を行えば、処理の順番がキープできるのではないか、と。

# スタイルの調整が必要になるかも、という気がしなくもないです

他5件のコメントを見る
id:weed_7777

うおおおおおおお、動いたあああああ!
a-kuma3さん最強っす。
本当にありがとうございました。

2017/03/17 12:55:16
id:a-kuma3

(・`ω´・) ウシッ

2017/03/17 13:49:55

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません