我在基于Sencha Touch 2的移动应用程序中设计了类似于按钮的普通链接,而且我遇到的问题是大多数链接在iPhone上的Safari中无法正常工作.
该链接是一个普通<a>标签,内部<span>元素包含标签文本.<a>元素上有填充,允许注册点击.似乎内部<span>阻止了点击在父锚中作为链接点击注册,其背景是透明的.
这是标记:
<a href="http://test-site.xx/full-site-page?param=value" class="x-button-normal x-button btn-profile">
<span class="x-button-label">View profile on full site</span>
</a>
Run Code Online (Sandbox Code Playgroud)
在Chrome中进行测试不会出现任何问题,即单击跨度会导致遵循父超链接.两者都是基于Webkit的浏览器.我们的一位测试人员也在Safari上用Macbook测试了这一点,没有任何问题; 我还使用Wacom Bamboo平板电脑在Chrome中对此进行了测试,没有任何问题.这只是移动设备上的一个问题(在iPhone和Android 2.2上都经过测试) - 这就是我们的目标.
我可以在<span>元素上设置一个CSS属性,以允许点击通过父超链接吗?理想情况下,我希望避免通过JavaScript设置事件.关于为什么这不符合我的预期的任何想法?
更新:以下是Chrome开发者控制台报告的内部范围样式:
-webkit-box-align: center;
-webkit-box-flex: 1;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-user-drag: none;
-webkit-user-select: none;
background-attachment: scroll;
background-clip: border-box;
background-color: transparent;
background-image: none;
background-origin: padding-box;
border-bottom-color: white;
border-bottom-style: none;
border-bottom-width: 0px;
border-left-color: white;
border-left-style: none;
border-left-width: 0px;
border-right-color: white;
border-right-style: none;
border-right-width: 0px;
border-top-color: white;
border-top-style: …Run Code Online (Sandbox Code Playgroud) 作为一个上下文,我正在开发一个ASP.NET MVC 5应用程序,该应用程序通过Microsoft的OWIN实现使用基于OAuth的身份验证,仅在此阶段用于Facebook和Google.目前(截至v3.0.0,git-commit 4932c2f),FacebookAuthenticationOptions并且GoogleOAuth2AuthenticationOptions没有提供任何属性来强制Facebook或Google分别在登录时重新验证用户(通过附加相应的查询字符串参数).
最初,我开始重写以下类:
FacebookAuthenticationOptionsGoogleOAuth2AuthenticationOptionsFacebookAuthenticationHandler(具体AuthenticateCoreAsync())GoogleOAuth2AuthenticationHandler(具体AuthenticateCoreAsync())但发现这些~AuthenticationHandler类被标记为internal.
所以我为Katana项目提取了一份源代码(http://katanaproject.codeplex.com/)并相应地修改了源代码.
编译之后,我发现有几个依赖项需要更新才能在MVC项目中使用这些更新的程序集(Microsoft.Owin.Security.Facebook和Microsoft.Owin.Security.Google):
这是通过将现有项目引用替换为3.0.0版本并在web.config中更新它们来完成的.好消息:该项目编制成功.
在调试中,我在启动时收到异常:
[MVC web assembly] .dll中出现'System.IO.FileLoadException'类型的异常,但未在用户代码中处理
附加信息:无法加载文件或程序集"Microsoft.Owin.Security,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
基本的异常表明Microsoft.AspNet.Identity.Owin试图加载的V2.1.0 Microsoft.Owin.Security打电话时app.UseExternalSignInCookie()从Startup.ConfigureAuth(IAppBuilder app)在Startup.Auth.cs.
不幸的是,程序集(及其它依赖项,Microsoft.AspNet.Identity.Owin)不是Project Katana解决方案的一部分,我无法在线找到这些程序集的任何可访问存储库.
Microsoft.AspNet.Identity程序集是否开源,如Katana项目?有没有办法欺骗这些程序集使用引用的v3.0.0程序集而不是v2.1.0?该
/bin文件夹包含Owin程序集的3.0.0版本.
我已经为Microsoft.AspNet.Identity.Owin升级了NuGet包,这仍然是一个问题.
有关如何解决此问题的任何想法?
我在重构我们的支付处理操作方法(由我们的第 3 方在线支付提供商调用)时遇到问题。我们有一个产品控制器,在类级别具有[Authorize]和[RoutePrefix("products")]属性,以及操作方法,包括以下内容:
Product(string contractNumber)具有路由属性[Route("{productCode}")]MakePayment(string productCode, PaymentAmountType? amountSelection, decimal? amountValue)具有路由属性[Route("{productCode}")]和[HttpPost]属性ProcessPayment(string productCode, string result)具有路由属性[Route("{productCode}")]由于我们的支付网关需要能够ProcessPayment在访问者重定向到同一 URL 之前调用我们的操作,因此我们必须将其重构为不带该[Authorize]属性的单独控制器。(我们已经有防止重复记入付款的机制。)
在此重构之前,MakePayment操作方法在以下调用中正确地制定了正确的返回 URL Url.Action():
var rawCallbackUrl = Url.Action("ProcessPayment", new { productCode = productCode });
Run Code Online (Sandbox Code Playgroud)
现在,操作ProcessPayment方法已从产品控制器移出并移入新控制器 ,ExternalCallbackController该控制器没有属性(更不用说[Authorize]),以避免将 HTTP 401 响应返回给支付提供商。
现在,路线属性 onProcessPayment是[Route("order-processing/{productCode}/process-payment")]为了避免与RoutePrefix产品控制器上的 发生冲突。对此更新的操作方法的所有引用均已更新以指定ExternalCallbackController.
手动浏览到该 URL 会导致内部设置的断点ProcessPayment被命中,因此该路由显然可以成功运行。 …
我正在开发一个Android 3.1应用程序,它使用USB主机模式通过USB over USB与我的键盘(Korg M3)进行通信.这是在安装了Android 4.0.3的Xoom上运行的.我能够通过USB接收MIDI信息而没有任何问题,但将笔记数据发送回键盘却取得了不同的成功,在半秒延迟后频繁崩溃.
这是我在操作栏上点按按钮发送注释时遇到的错误:
E/dalvikvm(6422):JNI ERROR(app bug):访问过时的全局引用0x1da0020a(大小为130的表中的索引130)
我检查/试图追查原因:
synchronized块,包括对输出请求池,输入请求池(根据Android文档中的ADB示例)的访问,以及当前输出请求和关联ByteBuffer对象引用的自定义锁对象.我已经构造了执行这些锁的代码,以最大限度地减少发生死锁的可能性.UsbRequest从相关请求池中检索可用对象时,我将clientData引用设置为新ByteBuffer对象,而不是重用以前关联的ByteBuffer对象并对其进行调用clear().我已经在代码的关键点添加了大量的日志记录调用(对于logCat),以尝试跟踪其确切失败的位置.我发现错误最终发生在以下几点(此代码在此之前可以正常运行几次):
public void sendMidiData()
{
synchronized(_outputLock)
{
if(_currentOutputRequest == null || _outputBuffer.position() < 2)
return;
Log.d(_tag, "Queuing Send request");
//// ERROR - happens in this next statement:
_currentOutputRequest.queue(_outputBuffer, _maxPacketSize);
Log.d(_tag, "Send request queued; resetting references...");
//Initialise for next packet
_currentOutputRequest = null; //getAvailableSendRequest();
_outputBuffer = null; //(ByteBuffer)_currentOutputRequest.getClientData();
Log.d(_tag, "Output request & buffer references set."); …Run Code Online (Sandbox Code Playgroud)