J'essaie d'utiliser la bibliothèque openid selector javascript pour autoriser la connexion OpenId à un site Web. Je suis les instructions sur this site, mais je ne suis pas habituellement un programmeur de Web et son ne fonctionne pas et je ne suis pas certain pourquoi. Je suis sûr que c'est quelque chose d'assez trivial mais je ne peux pas le voir.Problèmes d'intégration du sélecteur openId avec Asp.Net MVC 2
Le problème est qu'aucune image avec les bits Id ouverts sur elle est rendu à l'endroit où il devrait aller, ce qui est le <div id="openid_btns"></div>
je suppose. Cela semble m'indiquer que la fonction qui est censée définir le contenu de cette div n'est pas exécutée.
J'ai suspecté les scripts.
J'ai ajouté les références de script à l'Site.master comme il indique:
<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>
et il semble appeler la fonction sur chaque page (l'alerte est affichée) et il devrait alors, je suppose, appelez la fonction openid.init.
cela est défini dans le script 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);
}
à nouveau j'ai ajouté le alert("initialising");
qui semble ne jamais être appelé.
Devrait-il appeler cette fonction? Comment puis-je déterminer pourquoi cette fonction n'est pas appelée? Des idées?
MISE À JOUR:
dans le document fonction prêt i troqué l'ordre des fonctions comme ceci:
<script type="text/javascript">
$(document).ready(function() {
openid.init('openid_identifier');
alert("document ready");
});
</script>
et maintenant l'alerte ne se pose pas. Qu'est-ce que ça veut dire? Quelque chose ne va pas dans l'autre fonction? comment puis-je dire ce que c'est?
MISE À JOUR 2:
Wierd. Si je renomme le fichier openid-jquery.js en quelque chose (apparemment n'importe quoi) (comme openid-jquery.2.js) alors je peux voir l'alerte à partir du script open id.
mais il semble seulement exécuter l'alerte et non la ligne suivante comme lorsque j'ajoute un autre changement plus tard (c'est-à-dire après la ligne suivante) la 2ème alerte n'est jamais vue. Je ne sais pas pourquoi ce serait non plus.
MISE À JOUR 3: Après le débogage en chrome, il semble que le problème était que providers_large, providers_small
ne sont pas définis et en ajoutant:
var providers_large;
var providers_small;
au début du script lui a permis d'au moins courir et montrer les alertes. mais toujours pas d'images ... une enquête plus poussée je pense.