2

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;

スクリプトの先頭に、少なくともアラートを実行して表示できるようにしました。しかし、まだ画像はありません...さらなる調査だと思います。

4

3 に答える 3

2

provider_largeしたがって、手順のステップ4で、が定義されている場所である英語のjavascriptプロバイダー情報を追加するように更新する必要があるようです。

<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" src="../../Scripts/openid-jquery-en.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>  
于 2010-11-29T23:10:13.457 に答える
1

バージョン1.3の上記のSamの回答を少し更新します。

解凍されたファイル:

C:\ Blah \ openid-selector-1.3 \ openid-selector \ js \ openid-en.js

スクリプトタグ:

<script type="text/javascript" src="../../Scripts/openid-en.js"></script>

于 2011-02-26T05:13:02.163 に答える
0

同じ問題が発生しました。web.configを確認し、すべてのユーザーにこれらの新しいディレクトリへのアクセス許可を追加してから、機能します。

于 2011-09-23T17:29:30.937 に答える