Làm cách nào để tắt liên kết số điện thoại trong Mobile Safari?


363

Safari trên iPhone tự động tạo liên kết cho các chuỗi chữ số xuất hiện cho các số điện thoại. Tôi đang viết một trang web chứa địa chỉ IP và Safari đang biến nó thành liên kết số điện thoại. Có thể vô hiệu hóa hành vi này cho toàn bộ trang hoặc một thành phần trên một trang không?


Câu trả lời:


714

Đây có vẻ là điều đúng đắn, theo Tài liệu tham khảo Safari HTML :

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

Nếu bạn vô hiệu hóa điều này nhưng vẫn muốn liên kết điện thoại, bạn vẫn có thể sử dụng lược đồ URI "tel".

Đây là trang có liên quan tại Thư viện nhà phát triển của Apple.


1
Điều này chỉ đơn giản là không hoạt động. Không dành cho ứng dụng web trên iOS 4.3.1.
mhenry1384

5
4.2.1 trên iPhone hoạt động; developer.apple.com/l
Library / ios / # featuredarticles

2
Chỉ muốn lưu ý rằng điều này cũng hoạt động cho các phiên bản gần đây, chẳng hạn như 5.1.1 mà tôi đang sử dụng.
Dave Stein

4
Điều này có thể được áp dụng trên từng trường hợp? Ví dụ: 1 chuỗi số trên một trang tôi không muốn được hiểu là số điện thoại, nhưng giữ hành vi cho 6 người khác trên một trang mà tôi muốn được tự động hiểu là số điện thoại?
jpostdesign

3
Điều này hoạt động hoàn toàn tốt trong iOS 12 năm 2019! 👍🏻
Matt Komarnicki

38

Để vô hiệu hóa giao diện phân tích cú pháp điện thoại cho các thành phần cụ thể, CSS này dường như thực hiện thủ thuật:

.element { pointer-events: none; }
.element > a { text-decoration:none; color:inherit; }

Quy tắc đầu tiên vô hiệu hóa nhấp chuột, quy tắc thứ hai chăm sóc kiểu dáng.


5
Giải pháp tuyệt vời nơi bạn muốn hạn chế kiểu dáng / định dạng ở vị trí rất cụ thể.
mikevoermans

36

Tôi sử dụng công cụ nối có độ rộng bằng không &zwj;

Chỉ cần đặt nó ở đâu đó trong số điện thoại và nó hoạt động với tôi. Đã thử nghiệm trong BrowserStack (và Litmus cho email).


1
Điều này làm việc cho tôi. Tôi chỉ cần thêm nó trước số đầu tiên.
vinboxx

1
Giải pháp tốt nhất!
El cero

Tôi đã tạo chữ ký email HTML và đây là giải pháp duy nhất giúp ngăn thư iOS 10 phát hiện sai số (không phải điện thoại) dưới dạng số điện thoại.
Nick

1
Giải pháp gọn gàng. Hoạt động tốt trên iPhone 6S (+) / iOS 9.
Ain Tohvri

1
Đây là giải pháp khả thi duy nhất nếu bạn yêu cầu Mobile Safari tải tệp XML sử dụng chỉ thị <? Xml-Stylesheet> để tạo trang HTML. Mobile Safari chuyển đổi bất kỳ số dài nào trong XML gốc thành liên kết "tel:", mặc dù nguồn không phải là HTML (!).
Đánh dấu Reinhold

33

Tôi đã có cùng một vấn đề. Tôi đã tìm thấy một thuộc tính trên UIWebView cho phép bạn tắt các trình phát hiện dữ liệu.

self.webView.dataDetectorTypes = UIDataDetectorTypeNone;

Cuối cùng, một giải pháp hiệu quả với tôi. Tất nhiên, điều này sẽ chỉ hoạt động với những người viết ứng dụng object-c của riêng họ bằng UIWebView và không sử dụng ứng dụng Safari. Cảm ơn!!
iandotkelly

29

Thêm điều này, tôi nghĩ đó là những gì bạn đang tìm kiếm:

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

10

Giải pháp cho Webview!

Đối với các ứng dụng PhoneGap-iPhone / PhoneGap-iOS, bạn có thể tắt phát hiện số điện thoại bằng cách thêm thông tin sau vào đại biểu ứng dụng của dự án:

// ...

- (void)webViewDidStartLoad:(UIWebView *)theWebView 
{
    // disable telephone detection, basically <meta name="format-detection" content="telephone=no" />
    theWebView.dataDetectorTypes = UIDataDetectorTypeAll ^ UIDataDetectorTypePhoneNumber;

    return [ super webViewDidStartLoad:theWebView ];
}

// ...

nguồn: Vô hiệu hóa Phát hiện điện thoại trong PhoneGap-iOS .


Đã đi vào để thực hiện mã của awoodland trước khi tôi đọc bình luận badger110. Vì vậy, tôi ở đó, trong AppDelegate.m khi tôi thấy điều này ở đâu đó. Tôi bắt đầu nhìn xung quanh, tìm hộp kiểm trong tệp xib và tôi nghĩ rằng tôi vừa phát hiện ra điều gì đó kỳ diệu. Tôi trở lại để đăng phát hiện vinh quang này và tìm thấy bình luận của badger110 có ở đó cùng. TL DR: Đọc các bình luận đầu tiên, ya knuckle đầu.
Tina D.

8

Để tắt phát hiện số điện thoại trên một phần của trang, hãy bọc văn bản bị ảnh hưởng trong thẻ neo với href = "#". Nếu bạn làm điều này, Safari di động và UIWebView sẽ để nó một mình.

<a href="#"> 1234567 </a>

1
Đây là những gì tôi đã làm vì metathẻ không hoạt động. Tuy nhiên, có lẽ nên thực hiện tốt hơn <a href="javascript:;">để ngăn tác dụng phụ từ thay đổi URL.
JustJohn

Điều này làm việc cho tôi trong email HTML. Tôi chỉ muốn vô hiệu hóa một số điện thoại, không phải tất cả. Tôi vừa thêm style = "text-trang trí: none;" vào thẻ có màu để khớp với phần còn lại của văn bản và bạn cũng có thể thay đổi kiểu con trỏ.
Simon Darby

6

Hãy nghĩ rằng tôi đã tìm thấy một giải pháp: đặt số bên trong một <label>yếu tố. Không thử bất kỳ thẻ nào khác, nhưng vẫn <div>để nó hoạt động trên màn hình chính, ngay cả với telephone=nothuộc tính.

Có vẻ như rõ ràng từ các ý kiến ​​trước đó rằng thẻ meta đã hoạt động, nhưng vì một số lý do đã bị phá vỡ trong các phiên bản sau của iOS, ít nhất là trong một số điều kiện. Tôi đang chạy 4.0.1.


Chào Bob. Nếu bạn muốn đưa vào các ví dụ mã HTML, bạn phải bọc mã trong backticks , <like this>. (Stack Overflow sử dụng ngôn ngữ định dạng có tên Markdown.) Tôi sẽ chỉnh sửa câu trả lời của bạn cho phù hợp.
Paul D. Chờ

Điều đó cuối cùng không hoạt động - khi tôi tải lại Ứng dụng, liên kết ẩn đã trở lại. Tôi đã sử dụng để thêm một #ký tự vào trước số điện thoại: theo tài liệu Apple "Tham khảo lược đồ URL của Apple": "Cụ thể, nếu một URL chứa các ký tự * hoặc #, ứng dụng Điện thoại không cố gắng quay số tương ứng số điện thoại."
BobFromBris

Bạn nên xóa câu trả lời của mình, vì nó không hoạt động. Như chính bạn thừa nhận trong nhận xét trên.
mhenry1384

@Bob Mẹo sạch đẹp. Chúng tôi đã có vấn đề với HTML trong một email. Gói trong một nhãn hoạt động tốt +1, cảm ơn
geedubb

6

Bạn cũng có thể sử dụng <a>nhãn với javascript: void(0)như hrefgiá trị.

Ví dụ như sau:
<a href="javascript: void(0)">+44 456 77 89 87</a>


Điều này giúp tôi khi cần vẫn sử dụng kiểu và hành động mặc định của iOS mà bỏ qua các yếu tố cụ thể.
lớn hơn

4

Tôi đã có cùng một vấn đề, nhưng trên một ứng dụng web iPad.

Thật không may, cả ...

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

cũng không ...

&#48; = 0
&#57; = 9

... đã làm việc.

Nhưng, đây là ba hack xấu xí:

  • thay thế số "0" bằng chữ "O"
  • thay số "1" bằng chữ "l"
  • chèn một khoảng vô nghĩa: vd 555.5<span>5</span>5.5555

Tùy thuộc vào phông chữ bạn sử dụng, hai cái đầu tiên hầu như không đáng chú ý. Cái sau rõ ràng liên quan đến mã thừa, nhưng vô hình với người dùng.

Chắc chắn hack không thể hack và có thể không khả thi nếu bạn đang tạo mã của mình một cách linh hoạt từ dữ liệu hoặc nếu bạn không thể làm ô nhiễm dữ liệu của mình theo cách này.

Nhưng, đủ trong một nhúm.


2
Tùy thuộc vào phông chữ bạn sử dụng, hai cái đầu tiên hầu như không đáng chú ý. Trừ khi người dùng đã đặt iOS để đọc nội dung cho họ . Sau đó, nó sẽ được chú ý.
Paul D. Chờ

1
Đối với khả năng truy cập (như trình đọc văn bản được đề cập ở trên) hoặc nếu người dùng sao chép / dán vào ứng dụng điện thoại, điều này chỉ phá vỡ mọi thứ. Ngoài ra, nói chung nếu một con nhện từ Yelp hoặc Google hoặc tương tự đang lập chỉ mục một doanh nghiệp và lấy nhầm số điện thoại, điều đó không tốt.
Giô-na

4

Tôi đã có ABN (Số doanh nghiệp Úc) mà iPad Safari khăng khăng muốn chuyển thành liên kết số điện thoại. Không có gợi ý nào giúp được. Giải pháp của tôi là đặt các thẻ img giữa các số.

ABN 98<img class="PreventSafariFromTurningIntoLink" /> 009<img /> 675<img /> 709

Lớp chỉ tồn tại để ghi lại những gì các thẻ img dành cho.

Hoạt động trên iPad 1 (4.3.1) và iPad 2 (4.3.3).


3
Thật không may, trong Internet Explorer tôi nhận được những biểu tượng hình ảnh bị hỏng. Thêm width="0" height="0"trợ giúp, nhưng vẫn hiển thị một pixel.
Geert

1
Bạn không cần hình ảnh, chỉ cần đặt bất kỳ HTML nào vào số: <p> Không phải điện thoại: 112 <span> 34 </ span> 56 </ p>
Radek Pech

@Geert, đặt line-heightfont-sizevề không.
HelpNeeder

4

Kinh nghiệm của tôi cũng giống như một số người khác đề cập. Thẻ meta ...

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

... Hoạt động khi trang web đang chạy trong Mobile Safari (nghĩa là có chrome) nhưng dừng hoạt động khi chạy dưới dạng webapp (nghĩa là được lưu vào màn hình chính và chạy mà không có chrome).

Giải pháp ít lý tưởng hơn của tôi là chèn các giá trị vào các trường đầu vào ...

<input type="text" readonly="readonly" style="border:none;" value="3105551212">

Điều đó ít hơn lý tưởng bởi vì, mặc dù đường viền được đặt thành không, iOS hiển thị thanh màu xám nhiều pixel phía trên trường. Nhưng, tốt hơn là xem số đó là một liên kết.


3

Tôi đã tự mình thử nghiệm và thấy rằng nó hoạt động mặc dù nó chắc chắn không phải là một giải pháp tao nhã. Chèn một khoảng trống trong số điện thoại sẽ ngăn các máy dò dữ liệu biến nó thành một liên kết.

(604) 555<span></span> -4321

1
Đây cũng là bản sửa lỗi tôi đã sử dụng và nó hoạt động rất tốt và khá đơn giản.
Holger

2
Đây không phải là một câu trả lời hay, bởi vì bạn tạo ra HTML xấu cố ý.
stephanfriedrich 7/1/2015

2

<meta name = "format-detection" content = "telephone=no"> không hoạt động đối với email: nếu HTML bạn đang chuẩn bị cho email, thẻ meta sẽ bị bỏ qua.

Nếu những gì bạn đang nhắm mục tiêu là email, thì đây là một giải pháp xấu nhưng hiệu quả khác cho bạn:

Ví dụ về một số HTML bạn muốn tránh được liên kết hoặc tự động định dạng:

will cease operations <span class='ios-avoid-format'>on June 1,
2012</span><span></span>.

Và CSS sẽ làm nên điều kỳ diệu:

@media only screen and (device-width: 768px) and (orientation:portrait){
span.ios-date{display:none;}
span.ios-date + span:after{content:"on June 1, 2012";}
}

Hạn chế: bạn có thể cần một truy vấn phương tiện cho mỗi combo chân dung / phong cảnh ipad / iphone



1

Vấn đề tương tự trong ứng dụng Sencha Touch được giải quyết bằng thẻ meta ( <meta name="format-detection" content="telephone=no">) trong index.html của ứng dụng.


1

Một mẹo tôi sử dụng không chỉ hoạt động trên Mobile Safari là sử dụng mã thoát HTML và một chút đánh dấu trong số điện thoại. Điều này khiến trình duyệt khó "nhận dạng" số điện thoại hơn, tức là

Phone: 1-8&#48;&#48;<span>-</span>62&#48;<span>-</span>38&#48;3

1

Tôi cũng có vấn đề này: Safari và các trình duyệt di động khác chuyển đổi ID VAT thành số điện thoại. Vì vậy, tôi muốn một phương thức sạch để tránh nó trên một phần tử, không phải toàn bộ trang (hoặc trang).
Tôi đang chia sẻ một giải pháp khả thi mà tôi đã tìm thấy, nó không tối ưu nhưng vẫn khá khả thi: Tôi đặt, bên trong số tôi không muốn trở thành một tel:liên kết, &#8288;thực thể HTML là ký tự vô hình của Word-Joiner . Tôi đã cố gắng duy trì ngữ nghĩa nhiều hơn (tốt, ít nhất là một loại) bằng cách đặt char này ở một vị trí nào đó, ví dụ: ID VAT tôi đã chọn đặt nó giữa các nhóm chữ số khác nhau theo định dạng của nó để có VAT Ý đã viết: biểu 0613605&#8288;048&#8288;8hiện trong 0613605⁠048⁠8 và nó không được chuyển đổi trong một số điện thoại.


1

Một tùy chọn khác là thay thế các dấu gạch nối trong số điện thoại của bạn bằng ký tự (U + 2011 'Dấu gạch ngang không phá vỡ Unicode')


1

Tôi đã thực sự bối rối bởi điều này trong một thời gian nhưng cuối cùng đã tìm ra nó. Chúng tôi đã cập nhật trang web của mình và có một số số chuyển đổi thành liên kết và một số không. Hóa ra các số sẽ không được chuyển đổi thành một liên kết nếu chúng nằm trong <fieldset>. Rõ ràng không phải là giải pháp đúng cho hầu hết các trường hợp, nhưng trong một số trường hợp, nó sẽ là giải pháp đúng.


0

Câu trả lời này hơn hẳn mọi thứ kể từ ngày 6-13-2012:

<a href="#" style="color: #666666; 
                   text-decoration: none;
                   pointer-events: none;">
  Boca Raton, FL 33487
</a>

Thay đổi màu thành bất kỳ màu nào phù hợp với văn bản của bạn, trang trí văn bản sẽ loại bỏ phần gạch chân, các sự kiện con trỏ ngăn không cho nó được xem như một liên kết trong trình duyệt (con trỏ không thay đổi thành một bàn tay)

Điều này là hoàn hảo cho các email HTML trên ios và trình duyệt.


1
Có vẻ như tôi đặt màu này rõ ràng. Nói cách khác, nó sẽ có màu xám không có vấn đề gì.
benzado

Các sự kiện con trỏ của con trỏ ngăn không cho nó được xem như một liên kết trong trình duyệt, - trong một trình duyệt hỗ trợ pointer-events, chắc chắn. Tuy nhiên, nếu người dùng đang xem e-mail HTML của bạn trong IE 10, thì không tốt .
Paul D. Chờ

Câu hỏi là về việc ngăn chặn phát hiện số điện thoại, không phải địa chỉ gửi thư.
jww

0

Tại sao bạn muốn loại bỏ liên kết, nó làm cho nó rất thân thiện với người dùng để có eoption.

Nếu bạn chỉ muốn xóa chỉnh sửa tự động, nhưng giữ cho liên kết hoạt động, chỉ cần thêm phần này vào CSS của bạn ...

a[href^=tel] {
 color: inherit;
 text-decoration:inherit;
}

5
tốt, tôi không thể nói về poster gốc, nhưng trong trường hợp của tôi, Safari đang đoán những chiếc điện thoại không thực sự là số điện thoại, chúng là dữ liệu tài chính
Irae Carvalho

1
Câu hỏi là về phát hiện liên kết trên số điện thoại, không chỉnh sửa chúng.
jww

Trong một số trường hợp, bạn có thể có số điện thoại trên một trang web nơi bạn cần thực hiện một số thao tác khác ngoài thực hiện cuộc gọi điện thoại như kéo lên một tùy chọn để chỉnh sửa hoặc khả năng nhấp và kéo nó đến một nơi khác.
Nosajimiki

anh ấy không muốn có địa chỉ IP được liên kết dưới dạng số điện thoại
jahller

0

Chia số thành các khối văn bản riêng biệt

301 <div style="display:inline-block">441</div> 3909

1
Bạn có thể muốn đề cập rằng đây là một cách giải quyết.
Daan

-16

Một giải pháp khác là sử dụng hình ảnh của số IP


4
Tôi nghĩ rằng, đây không phải là một ý tưởng thần thánh. Hãy xóa câu trả lời của bạn. Bởi vì, bạn không thể sao chép / dán Văn bản hình ảnh, nó không dễ sử dụng (nếu bạn thay đổi nội dung hoặc kiểu phông chữ) và cũng không phải là không có rào cản.
stephanfriedrich 7/1/2015

giải pháp có thể tồi tệ hơn vấn đề, như đã nói bởi @stephanfriedrich điều này sẽ không hữu ích hoặc có thể sử dụng được
kaosmos

Không hữu ích chút nào.
Luca Antonelli
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.