2017-04-30 8 views
8

iOSのスタンドアロンWebアプリケーションモードで、リンクをクリックすると、スタンドアロンモードではなくモバイルSafariでそのリンクが開きます。これは私にとって意味のないことです(少なくとも内部リンクについては)。ナビ時にiOS Safariのスタンドアロンモードに滞在する方法

私はこれを固定と考えることができる唯一の方法は、documentノードにクリックハンドラを追加し、手動で次のようにナビゲートしている:

if (window.navigator.standalone) { 
    document.addEventListener('click', (e) => { 
    if (e.target.tagName === 'A') { 
     e.preventDefault(); 
     window.location = e.target.getAttribute('href'); 
    }); 
} 

は、この動作を得るためのより少ないハック方法はありますか?これは本当に私の目を傷つける。

答えて

2

これらの行には残念なことがあります。標準的な方法です。 irae on GitHubにはStay Standaloneというスクリプトが組み込まれています。このスクリプトはあなたのためにすべての汚い作業を処理し、さまざまなエッジケースでテストされています。スクリプトは少し古いですが、現代版のiOSでも動作します。

コードは醜いかもしれませんが、コードは復元力があり、一般的なJavaScriptのバンドルに含めることができます。他のシナリオの動作は変更されません。これはちょうど投機ですが、私がAppleがこの動作を選択した理由は、スタンドアロンのWebアプリケーションには前方または後方のボタンがなく、リンクをクリックするとアプリケーションが「使用不可能」状態になる可能性があります。これは、一般的なエンドユーザーにとっては、おそらく最も望ましい動作です。ここで

はJavascriptをのコピーです:

(function(document,navigator,standalone) { 
    // prevents links from apps from oppening in mobile safari 
    // this javascript must be the first script in your <head> 
    if ((standalone in navigator) && navigator[standalone]) { 
     var curnode, location=document.location, stop=/^(a|html)$/i; 
     document.addEventListener('click', function(e) { 
      curnode=e.target; 
      while (!(stop).test(curnode.nodeName)) { 
       curnode=curnode.parentNode; 
      } 
      // Condidions to do this only on links to your own app 
      // if you want all links, use if('href' in curnode) instead. 
      if(
       'href' in curnode && // is a link 
       (chref=curnode.href).replace(location.href,'').indexOf('#') && // is not an anchor 
       ( !(/^[a-z\+\.\-]+:/i).test(chref) ||      // either does not have a proper scheme (relative links) 
        chref.indexOf(location.protocol+'//'+location.host)===0) // or is in the same protocol and domain 
      ) { 
       e.preventDefault(); 
       location.href = curnode.href; 
      } 
     },false); 
    } 
})(document,window.navigator,'standalone'); 

あなたはthe tests hereを見ることができます。

+0

これは実際のアプローチが必要であることを悲しんでいます。しかし、ありがとう! –

+0

ええ、私はそれも非常にバマーであることがわかりました。私は、通常のリンク動作を選択するために使用できるメタタグがあることを望みます。 –

関連する問題