2013-08-30 143 views
1

我一直在環顧四周,無法在單擊電話鏈接時禁止移動設備上的對話框。單擊電話鏈接時禁止本機對話框鏈接

我們有這樣的要求,用我們網站上的一個自定義彈出窗口替換iPhone和Android上的現有本機對話框。

我們有HTML5供我們使用,但對於一個基本站點,我們不使用JavaScript(適用於功耗較低的WAP電話)。

有沒有辦法通過我的網站的HTML來阻止來自瀏覽器(safari,chrome,firefox?)的手機本機對話框?

感謝

+0

是否僅對基於移動webkit的瀏覽器有要求?這些數字必須是電話:鏈接,或者你可以用不同的東西來包裝數字,以便將它們從瀏覽器中隱藏起來? – BigMacAttack

+0

將基於webkit ...如果我們僞裝他們,那麼我們仍然需要一種方法來從瀏覽器訪問電話撥號程序。 – aqwert

+0

要清楚。我們有效地想要代表[使用HTML定製的本地對話框。我們仍然希望能夠打電話。 – aqwert

回答

1

如果你使用的情況下可以讓你避免使用電話:鏈接的格式,你可以把這些數字中的其他東西,看起來像一個鏈接,然後有自己的網頁對待他們自己的喜好。並避免瀏覽器會自動將鏈接添加到它認爲是電話號碼的數字,下面的HTML標記添加到您的文檔的<head>(從Safari Developer Library):

<meta name="format-detection" content="telephone=no"> 

這是足夠的,或者是有更多對您的問題我不理解?

UPDATE

隨着進一步澄清,它出現在期望的結果是當按下tel://鏈路調天然電話撥號器,而是簡單地抑制先於撥號用戶提示。

RFC 3966: The tel URI for Telephone Numbers,第11節安全注意事項:
「Web客戶端和類似的工具,不得使用‘電話’URI放置 電話而沒有 客戶端的用戶的明確同意撥打電話自動無適當的用戶 確認可能會產生一些風險。」

因此,儘管它可能仍然是可能的,一個參數的存在是爲了抑制警報,如&confirmation=false&alert=no,它很可能是無證和不同的F或每個移動操作系統。我的猜測是它不存在。

可能的解決方法

按照iOS Developer Library
「當用戶點擊網頁中的電話聯繫,iOS設備會顯示警告詢問用戶是否真的要撥打的電話號碼,並開始撥號如果用戶接受,當用戶在本地應用程序中打開一個帶有tel方案的URL時,iOS不會顯示警報並啓動撥號,而不會進一步提示用戶,但是可以將本機應用程序配置爲顯示自己的警報。

所以,如果你的使用情況,您可以嵌入網站中UIWebView並將其分發作爲一個iOS應用,抑制警報應該是可能的。

按照Android Developer Docs
「[使用撥號器]要求您的應用程序請求以下權限在您的清單:<uses-permission id="android.permission.CALL_PHONE" />

如此反覆,如果你的使用情況,您可以嵌入網站在android.webkit.WebView並分發它作爲一個Android應用程序,抑制警報似乎也是可能的。

+0

偉大的迴應...我們已經有一個Android和iPhone應用程序,我們已經應用了這個。該Web應用程序適用於沒有下載應用程序的用戶或沒有應用程序可用的設備。我得到的印象(我原來也是這樣認爲的)是,無法從Web應用中禁止撥號器確認彈出窗口。由於我們也在處理衆多瀏覽器(safari,chrome,opera,firefox),如果信任任何此類抑制措施(如果它是遠程可用的),這將非常不可靠。 – aqwert

+0

我會稍後再解決問題,看看是否有更好的答案。 – aqwert

+0

@aqwert有趣的是,我剛創建了一個帶有「tel:」鏈接的測試頁,並在Android 2.3手機上打開了它。我沒有收到提示。相反,它直接將我帶到撥號器應用程序(但它實際上並不實際自動撥號)。這是你在Android上體驗的嗎? – BigMacAttack

0

不知道這是否是你要求的完整規範......據我所知,與此戰鬥已經打了好幾個月,沒有辦法直接抑制撥號對話框if OS認爲這是在獨立瀏覽器的頁面中點擊的電話號碼。

我記得它在數據區中用「Tel:...」廣播了一個意圖。由於供應商的撥號程序監視這一點,所以最希望的是讓您自己的撥號程序監聽該事件......但是,然後android會彈出令人討厭的「完整操作」對話框,並且他們必須點擊您的對話框,這將不得不推出另一個撥號器意圖。 (然後你會看到你的攔截撥號器嗎?)

正如BigMacAttack指出的那樣,你可以通過webkit運行它,將你的標籤改爲「tel」以外的內容並攔截它。同樣,如果服務器頁面始終可以通過網絡工具包視圖提供,則可以按照我在Android和iOS應用中執行的操作:

// Android flavored 
wv1.setWebViewClient(new WebViewClient() { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 

     boolean dialMe = false;     

     if (url.indexOf("tel:") > -1) { // PHONE permissions in AndroidManifest 
              // see also DIAL_PHONE 

      dialMe = myCustomDialerPopup (Uri.parse(url)) ; // display YOUR msg. 

      if (dialMe = true) { // launch normal dialer 

       Intent i = new Intent(Intent.ACTION_DIAL, Uri.parse(url)) ; 
       view.getContext().startActivity(i); 

      } else { 
          //// guess they don't want to call - oops marketing failed ! 
      } 
     } 

     return true; // or false to stop navigation. 
    } 

}