Можно ли настроить таргетинг на строку пользовательского агента для встроенного браузера WeChat на iOS?

Я все время искал какую-то документацию по строке пользовательского агента, которую создает встроенный браузер WeChat.

Я провожу много действительно конкретных определений браузера и не могу найти ничего отдаленно связанного со строкой UA, которую WeChat передает на веб-сайт.

Это будет что-то вроде этого:

Mozilla/5.0 (iPhone; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25

Кто-нибудь знает, есть ли способ отличить что-то вроде Safari на iOS от встроенного браузера WeChat на iOS? (или если это вообще возможно)

Будем очень признательны за любые предложения!


person interactronaut    schedule 07.08.2014    source источник


Ответы (3)


Я отредактировал свой ответ, так как обнаружил, что для Weixin (WeChat) существует JS API: http://mp.weixin.qq.com/qa/index.php?qa=search&q=weixinjsbridge

Короче говоря, вы просто добавляете это в свой js:

document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() { 
    // bridge initialized, meaning we're in WeChat, not stand-alone browser...
}, false);

Также есть API, чтобы делиться моментами и делиться с конкретным другом, а также получать обратный вызов при успешном обмене.

P.S.

Только что выяснил, что в iOS WeChat мост инициализируется намного быстрее, чем в Android, и тогда этот обратный вызов никогда не вызывается, потому что слушатель был добавлен после инициализации моста.

Итак, чтобы получить полный ответ, вот как это правильно сделать:

// when your webapp is loaded, before adding listener for weixing js bridge, check if it's already initialized:
var timeoutID = 0;
if( typeof WeixinJSBridge !== "undefined" )
{
    // WeChat JS bridge already initialized. Wonderful.
}
else
{
    // setup a time out of let's say 5 seconds, to wait for the bridge:
    timeoutID = window.setTimeout(WeChatBridgeTimeout,5000);
    // now add listener for the bridge:
    document.addEventListener('WeixinJSBridgeReady', WeChatBridgeReady, false);
}

// Now in bridge time out:
function WeChatBridgeTimeout()
{
     // Just to be sure that bridge was not initialized just before the line we added the listener (since it's a separate process than JS), let's check for it again:
      if( typeof WeixinJSBridge !== "undefined" )
      {
           // WeChat JS bridge already initialized. Wonderful.
      }
      else
      {
           // Nope... if it's not initialized by now, we're not in WeChat.
      }
}

// And in event handled:
function WeChatBridgeReady()
{
     // remove listener timeout
     window.clearTimeout(timeoutID);
     // WeChat JS bridge initialized.
}
person Sinisa    schedule 08.08.2014

Все очень просто. Просто проверьте пользовательский агент, например:

if(req.headers['user-agent'].indexOf('MicroMessenger') !== -1){
  //we are in wechat browser
  your code here
}

Иногда веб-браузер злонамеренно блокирует ссылки в App Store. Вот когда вам нужно перенаправить пользователей в другие места или побудить их открыть вашу страницу в других более удобных браузерах. :)

person Jiayang    schedule 28.01.2015

На данный момент (WeChat6.xx) строка UA встроенного браузера Wechat на ios:

... MicroMessenger/6.1.4 ..., в то время как сафари: ... Safari/600.1.4

поэтому следующий код работает как на Android, так и на iOS:

var isWeChat = /micromessenger/i.test(navigator.userAgent);

person gfaceless    schedule 04.05.2015