157

ホーム画面にアイコンを追加した後、Web に問題が発生しました。Web がホーム画面から起動された場合、すべてのリンクが Safari の新しいウィンドウで開きます (フルスクリーン機能は失われます)。どうすれば防ぐことができますか?同じ未回答の質問だけで、何の助けも見つかりませんでした。

4

20 に答える 20

111

iWebKitフレームワークで JavaScript ソリューションを見つけました。

var a=document.getElementsByTagName("a");
for(var i=0;i<a.length;i++)
{
    a[i].onclick=function()
    {
        window.location=this.getAttribute("href");
        return false
    }
}
于 2010-05-24T18:00:41.357 に答える
96

ここでの他のソリューションは、外部リンク (おそらく Safari で外部的に開きたい) を考慮していないか、相対リンク (ドメインを含まない) を考慮していません。

html5 mobile-boilerplate プロジェクトは、トピックに関する適切な議論があるこの要点にリンクしています: https://gist.github.com/1042026

彼らが思いついた最終的なコードは次のとおりです。

<script>(function(a,b,c){if(c in b&&b[c]){var d,e=a.location,f=/^(a|html)$/i;a.addEventListener("click",function(a){d=a.target;while(!f.test(d.nodeName))d=d.parentNode;"href"in d&&(d.href.indexOf("http")||~d.href.indexOf(e.host))&&(a.preventDefault(),e.href=d.href)},!1)}})(document,window.navigator,"standalone")</script>
于 2011-11-17T19:34:50.963 に答える
47

jQuery を使用している場合は、次のことができます。

$("a").click(function (event) {
    event.preventDefault();
    window.location = $(this).attr("href");
});
于 2011-04-01T04:45:27.140 に答える
21

これは、iOS 6.1 と Bootstrap JS リンク (つまり、ドロップダウン メニューなど) で機能しています。

$(document).ready(function(){
    if (("standalone" in window.navigator) && window.navigator.standalone) {
      // For iOS Apps
      $('a').on('click', function(e){
        e.preventDefault();
        var new_location = $(this).attr('href');
        if (new_location != undefined && new_location.substr(0, 1) != '#' && $(this).attr('data-method') == undefined){
          window.location = new_location;
        }
      });
    }
  });
于 2013-02-08T03:18:25.760 に答える
5

jQuery Mobile を使用している場合、data-ajax='false' 属性を使用すると新しいウィンドウが表示されます。実際、これは、外部リンク、$.mobile.ajaxEnabled 設定、または target='' 属性を持つことによって、ajaxEnabled がオフになっているときに常に発生します。

これを使用して修正できます:

$("a[data-ajax='false']").live("click", function(event){
  if (this.href) {
    event.preventDefault();
    location.href=this.href;
    return false;
  }
});

(live() メソッドについては Richard Poole に感謝 - bind() では機能していませんでした)

ajaxEnabled をグローバルにオフにしている場合は、[data-ajax='false'] を削除する必要があります。

jQuery Mobile 固有の問題であると予想していたので、これを理解するのにかなり時間がかかりました。実際には、新しいウィンドウを実際に禁止したのは Ajax リンクでした。

于 2012-08-07T12:23:34.390 に答える
5

David の回答と Richard のコメントに基づいて、ドメイン チェックを実行する必要があります。そうしないと、他の Web サイトへのリンクも Web アプリで開かれます。

$('a').live('click', function (event)
{      
    var href = $(this).attr("href");

    if (href.indexOf(location.hostname) > -1)
    {
        event.preventDefault();
        window.location = href;
    }
});
于 2011-10-24T09:53:31.840 に答える
3

ターゲットが明示的に「_blank」に設定されている場合、新しいウィンドウでリンクを開くことを許可する必要があるかもしれません:

$('a').live('click', function (event)
{      
    var href = $(this).attr("href");

    // prevent internal links (href.indexOf...) to open in safari if target
    // is not explicitly set_blank, doesn't break href="#" links
    if (href.indexOf(location.hostname) > -1 && href != "#" && $(this).attr("target") != "_blank")
    {
        event.preventDefault();
        window.location = href;
    }

});
于 2012-04-26T09:39:56.487 に答える
3

このコードはiOS 5で機能します(私にとっては機能しました):

head タグ内:

<script type="text/javascript">
    function OpenLink(theLink){
        window.location.href = theLink.href;
    }
</script>

同じウィンドウで開きたいリンクで:

<a href="(your website here)" onclick="OpenLink(this); return false"> Link </a>

このコメントからこのコードを取得しました: iphone web app meta tags

于 2012-04-07T14:25:07.753 に答える
2

これは、戻るボタンを妨げていた Sean のバージョンをわずかに調整したものです。

// this function makes anchor tags work properly on an iphone

$(document).ready(function(){
if (("standalone" in window.navigator) && window.navigator.standalone) {
  // For iOS Apps
  $("a").on("click", function(e){

    var new_location = $(this).attr("href");
    if (new_location != undefined && new_location.substr(0, 1) != "#" && new_location!='' && $(this).attr("data-method") == undefined){
      e.preventDefault();
      window.location = new_location;
    }
  });
}

});

于 2014-01-23T15:02:29.997 に答える
2

これは、iOS 6で私にとってうまくいったものです(rmarscherの答えを非常にわずかに適応させたものです):

<script>                                                                
    (function(document,navigator,standalone) {                          
        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;                         
                }                                                       
                if ("href" in curnode && (curnode.href.indexOf("http") || ~curnode.href.indexOf(location.host)) && curnode.target == false) {
                    e.preventDefault();                                 
                    location.href=curnode.href                          
                }                                                       
            },false);                                                   
        }                                                               
    })(document,window.navigator,"standalone")                          
</script>
于 2013-08-01T21:01:17.863 に答える
1

iOS Web アプリで使用した回避策の 1 つは、すべてのリンク (CSS によるボタン) をフォーム送信ボタンにすることでした。そこで、宛先リンクに投稿するフォームを開き、type="submit" と入力する 最善の方法ではありませんが、このページを見つける前にわかったことです。

于 2014-05-11T18:22:51.240 に答える
1

Twitter Bootstrap と Rails 3 を使用している場合

$('a').live('click', function (event) {
  if(!($(this).attr('data-method')=='delete')){
    var href = $(this).attr("href");
    event.preventDefault();
    window.location = href; 
  }   
});

削除リンクは引き続きこの方法で機能します。

于 2013-01-10T22:42:37.383 に答える
1

を使用しているJQuery Mobile場合、上記の解決策ではポップアップ ダイアログが壊れます。これにより、リンクが webapp 内に保持され、ポップアップが可能になります。

$(document).on('click','a', function (event) {
    if($(this).attr('href').indexOf('#') == 0) {
        return true;
    }
    event.preventDefault();
    window.location = $(this).attr('href');     
});

次の方法でも実行できます。

$(document).on('click','a', function (event){
    if($(this).attr('data-rel') == 'popup'){
        return true;
    }
    event.preventDefault();
    window.location = $(this).attr('href');     
});
于 2016-04-07T14:56:45.197 に答える
1

target="_blank" を含むものを除いて、スタンドアロン Web アプリ モード内のすべてのリンクを開くことを好みます。もちろんjQueryを使って。

$(document).on('click', 'a', function(e) {
    if ($(this).attr('target') !== '_blank') {
        e.preventDefault();
        window.location = $(this).attr('href');
    }
});
于 2013-08-04T00:39:52.703 に答える
1

ここにある@rmarscherの回答からbowerのインストール可能なパッケージを作成しました:

http://github.com/styr/iosweblinks

を使用して bower でスニペットを簡単にインストールできますbower install --save iosweblinks

于 2014-10-21T15:56:16.450 に答える
0

ページ上のすべてのリンクに使用するものは次のとおりです...

document.body.addEventListener(function(event) {
    if (event.target.href && event.target.target != "_blank") {
        event.preventDefault();
        window.location = this.href;                
    }
});

jQueryまたはZeptoを使用している場合...

$("body").on("click", "a", function(event) {
   event.target.target != "_blank" && (window.location = event.target.href);
});
于 2012-06-13T07:54:38.613 に答える
-3

このメタ タグは簡単に削除できます。

<meta name="apple-mobile-web-app-capable" content="yes">
于 2018-08-29T09:41:07.107 に答える