2016-12-15 89 views
2

在完成了很多对使用贝宝IPN发起支付项目的工作,我发现,这是成功的桌面浏览器,但在移动完全失效100%(在Chrome , 至少)。自动强制移动浏览器,桌面视图

经过一番研究,我发现,这是由于使用GET方法返回贝宝数据的移动浏览器,而不是使用POST桌面。

如果我“请求桌面视图”点击手机浏览器,那么这将让这个进程正常完成,但是这显然不是一个面向最终用户的极大乐趣。因为我已经有了一个死胡同(我实际上被告知这是一个PayPal问题,没有控制权 - 不知道是否真实),有没有办法自动强制移动浏览器上的桌面视图作为最后的手段?

我试图改变视口宽度(<meta name="viewport" content="width=1024"> ),但所有这一切都扩大了手机浏览器视图。它实际上并没有提供正确的桌面视图,只需手动点击“请求桌面视图”即可获得。

有人会知道是否有强制通过HTML或JS桌面视图的方式吗?

感谢,
丹。

回答

1

通常<meta name="viewport" content="width=1024">在某些情况下是足够的。

但是,如果你有单独的索引mobiledesktop版本,那么你可以使用这个脚本:

 function parseUA() { 
      var u = navigator.userAgent; 
      var u2 = navigator.userAgent.toLowerCase(); 
      return { 
       trident: u.indexOf('Trident') > -1, 
       presto: u.indexOf('Presto') > -1, 
       webKit: u.indexOf('AppleWebKit') > -1, 
       gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, 
       mobile: !!u.match(/AppleWebKit.*Mobile.*/), 
       ios: !!u.match(/\(i[^;]+;(U;)? CPU.+Mac OS X/), 
       android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, 
       iPhone: u.indexOf('iPhone') > -1, 
       iPad: u.indexOf('iPad') > -1, 
       webApp: u.indexOf('Safari') == -1, 
       iosv: u.substr(u.indexOf('iPhone OS') + 9, 3), 
       weixin: u2.match(/MicroMessenger/i) == "micromessenger", 
       ali: u.indexOf('AliApp') > -1, 
      }; 
     } 
     var ua = parseUA(); 

     if (ua.mobile) { 
      location.href = './pc.html'; 
     } 

基本上,即使你使用的移动然后它会被重定向到您的桌面版本(我个人使用这个方法)。

此脚本也适用于此link

var viewMode = getCookie("view-mode"); 
if(viewMode == "desktop"){ 
    viewport.setAttribute('content', 'width=1024'); 
}else if (viewMode == "mobile"){ 
    viewport.setAttribute('content', 'width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no'); 
} 
+0

嗨,我没有单独的索引。我试过用视口进行测试,但不幸的是我没有得到任何喜悦。谢谢。 –

2

所以,我相信这是答案...!在PayPal沙盒中做了这么多工作以确保事情正确之后,作为最后一招,我决定告知最终用户,他们必须进入桌面模式才能使用移动浏览器,并且从那里出发,带来不便。

然后我改变了我的链接从沙箱到现场贝宝。然后在桌面或移动设备上都无法工作!现场版本中出现了完全不同的登录界面,这意味着我的所有沙盒修补程序都是无用的。但是,新界面的网址类似于导致问题的移动版本。

我注意到,大多数贝宝的数据是被拉到对面,然后我恍然大悟。虽然它将txn_id的详细信息放入我的数据库,但我的付款处理页面依赖于数据库中的这些细节才能完全成功。该数据没有被足够快地输入到数据库中,以便捕获信息。

在我的支付处理页面的顶部我进入sleep(15);制止过程和所提供的信息足够的时间来输入数据库。现在这一切似乎工作正常。