アプリ版:「スタンプのみでお礼する」機能のリリースについて

jQueryプラグインである、Multifilter を使いたいと思ってます(http://tommyp.github.io/multifilter/)。はてなブログを使用しており、以下のように導入しても動作しません。

はてなブログhead要素に以下を
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1 …

本文には以下を書き込んでます。
<script type="text/javascript" src="http://www.googledrive.com/host/...../"></script>
<script type="text/javascript">
(function($){
$(document).ready(function() {
$('.filter').multifilter()
})
}(jQuery));
</script>

Multifilter プラグインは google drive 上にホスティングしています。

safari上で以下のエラーが出てしまいます。
TypeError: undefined is not a function (evaluating '$('.filter').multifilter()')

is not a function と出てますので、ホスティングがうまくいってないのかとも思ったのですが、ページのソースを見たところ、スクリプトは読み込まれているようでした。

jsやjqueryはあまりいじったことなく、にっちもさっちいかない状態です。
よろしくお願いします。

質問者からの補足コメント

  • ご回答ありがとうございます。「;」が抜けていたのは記載ミスです。すみません。
    multifilter.min.js の読み込みは、google drive 上にアップロードしており(正確には、min版ではないですが。)、
    <script type="text/javascript" src="http://www.googledrive.com/host/.../"></script>
    の1行で読み込んでいます。「...」の部分は英数字の文字列となっております。
    fujillinさんのご回答にある「alert($().multifilter);」にて確認したところ、読み込めてることも確認しました。

    テキストファイルに直に書き込んでブラウザーで開くと問題なく動作することは確認しました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/08/21 15:11
  • weakweak 様ご回答ありがとうございます。はてなブログ特有の問題?であることがわかりました。ご回答にあるように、可能な限り、下の方に「jquery」、「multifilter」、「スクリプト」を記載して、確かめたところ、うまくいきませんでしたが、

    そこで、はてなブログのページのソースを丸々コピペしてローカルで色々と確かめてみました。すると、以下の1行を消したところ問題なく動作しました(この1行ははてなブログで編集可能なところより下に記載されている)。
    ———
    <script type="text/javascript" src="http://blog.hatena.ne.jp/js?version=e26f39a279d2 …
    ———

      補足日時:2015/08/30 22:54
  • 続きです...
    <script type="text/javascript" src="http://blog.hatena.ne.jp/js?version=e26f39a279d2
    の中身は、
    ----
    window.define = undefined;
    /*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license
    ...省略...
    ----
    jQuery 1.9.1 の先頭に window.define の一文が付け加わったものだとわかりました。読み込みをキャンセルしたりできるのか調べたりしてみたのですが、良案は今の所ない状態です。

    ダメ元で、はてなブログ側に、問題の1文をどうにかできないか問い合わせているところです。

      補足日時:2015/08/30 23:01

A 回答 (5件)

ANo3です。



どうやら、ANo4様のご指摘の通りのようですね。
Multifilterが初期設定をした後に、jQueryの再読み込みで上書きされてしまっているのが原因と思われます。

ANo4様がご呈示のリンク先に対処法が記されていますが、同様にMultifilter自体の初期設定も遅らせて行う必要がありますね。
jQueryの再読込み後に、Multifilterを読込む必要がありますので、スクリプトから追加読込みを行う(script要素を作成)ようにするか、Multifilter本体を関数化するなどしておいて、実行のタイミングを遅らせてあげるなどの必要がありそうです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。結局は、はてなブログにおける問題であることがわかりました。編集可能な範囲外で、且つ再度 jQuery が読み込まれていたため動作しなかったのが原因でした。multifilter をページ読み込み後に読み込ませるようにすることで解決しました。ありがとうございました。

お礼日時:2015/09/01 11:21

はてなブログ固有の問題ではないでしょうか?

http://rochefort.hatenablog.com/entry/2013/12/10 …
jquery本体も、head内ではなくbodyの下の方で、

script src="jquery.js"
script src="multifilter.js"
script src="自分のスクリプト"

の順に読み込んでみるといかがですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。結局は、はてなブログにおける問題であることがわかりました。編集可能な範囲外で、且つ再度 jQuery が読み込まれていたため動作しなかったのが原因でした。multifilter をページ読み込み後に読み込ませるようにすることで解決しました。ありがとうございました。

お礼日時:2015/09/01 11:22

ANo2です。



>読み込めてることも確認しました。
あらら・・・ やっかいですね。

次に思いつくのは、ANo1でもあげたバインドの問題。
safari5.1からは対応しているようですが、試みとして、以下のサイトにあるバインドを定義する方法で対応可能かも知れません。
https://developer.mozilla.org/en-US/docs/Web/Jav …

それでもダメな場合は、いよいよ、エラーの発生個所を特定して対処するということになってしまうかな・・・
    • good
    • 0
この回答へのお礼

わざわざ、ご回答ありがとうございます。今の所、解決はしていません。今バインド等学習しているとこです。他のwebブラウザーでも動作しなかった&ローカルに単純にhtmlとjQueryを書いたところ問題なく動作しましたので、はてなブログとの相性のような気もしてきました。

お礼日時:2015/08/27 13:53

safariを知らないので、かなりの推測まじりですが・・・




エラーメッセージからすると、質問者様と同じことを考えますが、
>ページのソースを見たところ、スクリプトは読み込まれているようでした。
ページのソースでは、読み込まれているかはわからないのでは?
デバッグツールなどでDOMの内容を確認なさって、読み込めているということでしょうか?

ひとつのテストとして、読込後に
 alert($().multifilter);
などとしてみて、

 function (options) {
 "use strict";
   var settings = $.extend( {
    'target' : $('table'),
    'method' : 'thead' // This can be thead or class
   }, options);
   ・・・ 以下省略 ・・・

が表示されれば、きちんとjQueryに拡張されていることが確認できるはずです。
されない場合は、
 1)JSファイルが読み込まれていない。
 2)読み込めているが、スクリプト実行中にエラーを起している
が考えられます。
もう少し切り分けて、問題がどこにありそうかを調査なさるのが第一歩かと。


検索してみると、『safariの場合に"TypeError: ‘undefined’ is not a function"が出る』というものが数多く見つかります。
イベントのバインドに関するものが大半のようですが、以下あたりが多少は関係あるかも。
 http://d.hatena.ne.jp/kkotaro0111/20120819/13453 …
 http://www.crossl.net/blog/jquery_click_function …

2番目を見ると、safariを最新版にすることで、対応可能かもしれませんね。
 …って、それじゃ回答になってないじゃん(苦笑)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。結局は、はてなブログにおける問題であることがわかりました。編集可能な範囲外で、且つ再度 jQuery が読み込まれていたため動作しなかったのが原因でした。multifilter をページ読み込み後に読み込ませるようにすることで解決しました。ありがとうございました。

お礼日時:2015/09/01 11:21

$('.filter').multifilter() とその次の行の }) の;が抜けてるのも気になりますが。



>TypeError: undefined is not a function (evaluating '$('.filter').multifilter()')
はmultifilterの関数がエラーってことだと思うのですが、multifilter.min.js自体はどこで読み込んでるのですか?見た感じ記述ないですよね?
この回答への補足あり
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。結局は、はてなブログにおける問題であることがわかりました。編集可能な範囲外で、且つ再度 jQuery が読み込まれていたため動作しなかったのが原因でした。multifilter をページ読み込み後に読み込ませるようにすることで解決しました。ありがとうございました。

お礼日時:2015/09/01 11:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!