2012-04-27 65 views
0

ASP.NET MVC3剃刀项目你在哪里运行OpenID的选择产生-sprite.js

尝试使用http://weblogs.asp.net/haithamkhedre/archive/2011/03/13/openid-authentication-with-asp-net-mvc3-dotnetopenauth-and-openid-selector.aspx

实施的OpenID我已经编辑了OpenID的en.js脚本到:

var providers_large = { 
    myopenid: { 
    name: 'MyOpenID', 
    label: 'Enter your MyOpenID username.', 
    url: 'http://{username}.myopenid.com/' 
    }, 
    openid: { 
    name: 'OpenID', 
    label: 'Enter your OpenID.', 
    url: null 
    } 
}; 

删除所有提交到Google。我还删除了var providers_small部分并在open-jqeury.js中引用它。

这是我LogOn.cshtml形式

<form action="[email protected](Request.QueryString["ReturnUrl"])" method="post" id="openid_form"> 
<input type="hidden" name="action" value="verify" /> 
<div> 
    <fieldset> 
     <legend>Agency use only</legend> 
     <div class="openid_choice"> 
      <p> 
       Please click your account provider:</p> 
      <div id="openid_btns"> 
      </div> 
     </div> 
     <div id="openid_input_area"> 
      @Html.TextBox("openid_identifier") 
      <input type="submit" value="Log On" /> 
     </div> 

的问题是,无论我做什么,谷歌显示为第一供应商,很多时候不会列出者myOpenID提供商(雅虎也显示了有时也是)。我尝试删除cookie和历史记录(从IE和手动AppData \ Roaming ... \ Cookies子文件夹,AppData \ Local \等,重新启动Visual Studio,重新启动计算机等。我只想MyOpenID提供程序是我猜测openid-en.js已经保存在某个我找不到的地方,我搜索了整个计算机的文件,并删除了临时文件夹中的所有文件。

在进一步的问题解答中,我发现我只能使用MyOpenID,问题出在显示的提供者图标上,它们总是按顺序显示; Google,Yahoo,Aol,然后它将显示MyOpenID。因此,即使我只有在provider_large代码块中列出了MyOpenID,它也会将Google图标放在o在选择框中。点击Google图标会显示MyOpenId,所以它很实用,但显然会让用户感到困惑。问题在于某处此代码块在开放式的jquery.js

getBoxHTML : function(box_id, provider, box_size, index) { 
     if (this.no_sprite) { 
      var image_ext = box_size == 'small' ? '.ico.gif' : '.gif'; 
      return '<a title="' + this.image_title.replace('{provider}', provider["name"]) + '" href="javascript:openid.signin(\'' + box_id + '\');"' 
        + ' style="background: #FFF url(' + this.img_path + '../images.' + box_size + '/' + box_id + image_ext + ') no-repeat center center" ' 
        + 'class="' + box_id + ' openid_' + box_size + '_btn"></a>'; 
     } 
     var x = box_size == 'small' ? -index * 24 : -index * 100; 
     var y = box_size == 'small' ? -60 : 0; 
     return '<a title="' + this.image_title.replace('{provider}', provider["name"]) + '" href="javascript:openid.signin(\'' + box_id + '\');"' 
       + ' style="background: #FFF url(' + this.img_path + 'openid-providers-' + this.sprite + '.png); background-position: ' + x + 'px ' + y + 'px" ' 
       + 'class="' + box_id + ' openid_' + box_size + '_btn"></a>'; 
    }, 

如果我删除第二个---“的” href =‘JavaScript的:openid.signin(\’” ---选择的块是空白的,但仍然指向MyOpenID,它打破了功能,虽然点击选择框没有任何作用。如果我删除第一个openid.signin行为不会改变。有谁知道如何修改此代码块,以便它显示没有破坏功能的正确图标?

深入挖掘并找到Opened-jquery.js从opens-providers-en.png中提取提供程序图像当您编辑openid-en.js providers_large时,您必须更新opens-providers-en.png。你这样做运行generate-sprite.js,它是openid select的一部分,它需要ImageMagick。得到了这两个安装和运行generate-sprite.js我得到一个“Microsoft JScript运行时错误:'WScript'是未定义的”错误。目前还不清楚如何执行generate-sprite.js。如果我把它作为我的项目,我得到了 脚本“Microsoft JScript运行错误:“WScript的未定义”的错误在这部分代码中产生,sprite.js

var locale = 'en'; 
if (WScript.Arguments.length == 0) { 
    // assuming english locale 
} else { 
    locale = WScript.Arguments(0); 
} 

如何运行generate-sprite.js脚本?

任何JavaScript大师能告诉我如何在我的Win7和VS2010 Express设置上做到这一点。

+0

我认为你必须看到通的openid_choice'class'和'openid_btns id'代码。我的想法是那些负责显示提供者列表和他们的按钮。试着去做。 – uday 2012-04-29 16:19:27

+0

究竟是什么意思通过看。我正在查看open-en.js和openid-jquery.js中的所有代码,并且已经删除了对Google,yahoo和aol的所有引用,但它们仍然显示出来。 myopenid甚至不是我在provider_large下指定的那个。如果我删除了href =“javascript:openid.signin(\''+ box_id +'\');在openid-jquery.js中,我留下了两个空白框,你有任何具体的信息。牛逼是有帮助的,我做了我自己? – Joe 2012-04-29 20:41:22

+0

'

Please click your account provider:

'看看脚本,填补了DIV使用id =“openid_btns” N从中remvoe的谷歌。 – uday 2012-04-29 20:53:18

回答

0

回答

安装OpenID的选择到一个文件夹,并编辑每自述的生成-sprite.js。然后从该文件夹的命令行运行wscript generate-sprite.exe。它会生成一个新的openid-provider-en.png。我将它复制到我的图像文件夹中,并且MyOpenID选择框具有MyOpenId图标,并将我连接到MyOpenId登录。

另见WScript is undefined