openidセレクターのjavascriptライブラリを使用して、WebサイトのOpenIdログインを許可しようとしています。私はこのサイトの指示に従っていますが、私は通常Webプログラマーではなく、機能していません。その理由はわかりません。かなり些細なことだと思いますが、見えません。
問題は、Idビットが開いている画像が本来あるべき場所にレンダリングされないことです。これは<div id="openid_btns"></div>
私が想定していることです。これは、このdivの内容を設定するはずの関数が実行されていないことを示しているようです。
スクリプトを疑った。
次のように、Site.Masterにスクリプト参照を追加しました。
<script type="text/javascript" src="../../Scripts/jquery-1.4.1.min.js"></script>
<script type="text/javascript" src="../../Scripts/openid-jquery.js"></script>
<script type="text/javascript">
$(document).ready(function () {
alert("document ready"); // <- I added this to verfiy that this is being called
openid.init('openid_identifier');
});
</script>
そして、各ページで関数を呼び出しているようです(アラートが表示されています)。次に、openid.init関数を呼び出す必要があります。
これはopenid-jquery.js
スクリプトで定義されています:
var openid = {
version: '1.2', // version constant
demo: false,
demo_text: null,
cookie_expires: 6 * 30, // 6 months.
cookie_name: 'openid_provider',
cookie_path: '/',
img_path: '../images/',
lang: null, // language, is set in openid-jquery-<lang>.js
signin_text: null, // text on submit button on the form
input_id: null,
provider_url: null,
provider_id: null,
all_small: false, // output large providers w/ small icons
no_sprite: false, // don't use sprite image
image_title: '{provider}', // for image title
init: function (input_id) {
alert("initialising");
providers = $.extend({}, providers_large, providers_small);
var openid_btns = $('#openid_btns');
this.input_id = input_id;
$('#openid_choice').show();
$('#openid_input_area').empty();
var i = 0;
// add box for each provider
for (id in providers_large) {
if (this.all_small) {
openid_btns.append(this.getBoxHTML(id, providers_large[id], 'small', i++));
} else
openid_btns.append(this.getBoxHTML(id, providers_large[id], 'large', i++));
}
if (providers_small) {
openid_btns.append('<br/>');
for (id in providers_small) {
openid_btns.append(this.getBoxHTML(id, providers_small[id], 'small', i++));
}
}
$('#openid_form').submit(this.submit);
var box_id = this.readCookie();
if (box_id) {
this.signin(box_id, true);
}
もう一度、alert("initialising");
決して呼ばれないように見えるものを追加しました。
この関数を呼び出す必要がありますか?この関数が呼び出されていない理由をどのように判断できますか?何か案は?
アップデート:
ドキュメントレディ関数では、次のように関数の順序を入れ替えました。
<script type="text/javascript">
$(document).ready(function () {
openid.init('openid_identifier');
alert("document ready");
});
</script>
そして今、アラートは発生しません。これは何を意味するのでしょうか?他の機能に問題がありますか?どうすればそれが何であるかを知ることができますか?
更新2:
Wierd。openid-jquery.jsファイルの名前を他の何か(一見何でも)(openid-jquery.2.jsなど)に変更すると、openidスクリプトからアラートを確認できます。
ただし、アラートを実行するだけで、次の行は実行されないようです。後で別の変更を追加すると(つまり、次の行の後に)、2番目のアラートは表示されません。なぜそうなるのかわからない。
更新3:Chromeでデバッグした後、問題はproviders_large, providers_small
定義されておらず、次のように追加されたようです。
var providers_large;
var providers_small;
スクリプトの先頭に、少なくともアラートを実行して表示できるようにしました。しかし、まだ画像はありません...さらなる調査だと思います。