a

Câu hỏi Phát hiện bên trong Trình duyệt Android hoặc WebView


Làm cách nào để Javascript có thể phát hiện liệu trang web có được tải trong trình duyệt chứng khoán của Android hay được tải trong WebView của một ứng dụng khác không? Tôi muốn chạy mã hơi khác nhau trong hai trường hợp này.


35
2017-07-21 21:42


gốc


Kiểm tra xem liệu tác nhân người dùng webview có khác với trình duyệt chứng khoán Android không. Bạn có thể kiểm tra nó khá dễ dàng bằng cách vào trang này. whatsmyuseragent.com  Tuy nhiên tôi khá chắc chắn các đại lý người dùng sẽ được chính xác giống nhau trong trường hợp tôi không có ý tưởng. - Caimen
Trừ khi bạn là người sáng tạo của WebView được đề cập. Trong trường hợp đó tôi nghĩ bạn có thể đưa vào bất cứ thứ gì bạn muốn cho tác nhân người dùng - FoamyGuy
Nếu bạn chịu trách nhiệm về ứng dụng, có thể bạn có thể gửi một tác nhân người dùng cụ thể khi bạn tải trang và sau đó sử dụng đề xuất của Caimen ở trên không? Sử dụng SetUserAgentString của WebView chức năng, bạn có thể thiết lập một tác nhân người dùng cụ thể, và sau đó người dùng javascript để phát hiện sự khác biệt. - mopsled
Tôi là tác giả của ứng dụng sử dụng WebView. Tôi đã hy vọng cho một cách để phát hiện nó mà không cần viết mã bổ sung, nhưng đây là giải pháp tạm thời: this.webView.getSettings().setUserAgentString(this.webView.getSettings().getUserAgentString() + getString(R.string.user_agent_suffix)); trong đó user_agent_suffix là "AppName / 1.0". Tôi hy vọng đó là phù hợp với các tiêu chuẩn chuỗi tác nhân người dùng. - JoJo


Các câu trả lời:


Hoạt động -> onCreate

this.webView.getSettings().setUserAgentString(
    this.webView.getSettings().getUserAgentString() 
    + " "
    + getString(R.string.user_agent_suffix)
);

Res -> Giá trị -> strings.xml

<string name="user_agent_suffix">AppName/1.0</string>

Javascript

function() isNativeApp {
    return /AppName\/[0-9\.]+$/.test(navigator.userAgent);
}

50
2017-07-26 19:39



Đó là cách được đề xuất chính thức từ developer.android.com/guide/webapps/… - Marvin Emil Brach
@MarvinEmilBrach không hoạt động nếu bạn đang sử dụng auth truyền thông xã hội trong chế độ xem web. Nó sẽ mất giao diện Javascript - user516883
Điều này chỉ khả thi khi bạn cũng là nhà phát triển ứng dụng Android, nhưng nó sẽ không hoạt động nếu bạn không thể thay đổi mã nguồn ứng dụng mà trang sẽ chạy. Trừ khi, tất nhiên, nếu bạn liên hệ với nhà phát triển ứng dụng và họ đồng ý thực hiện các thay đổi trong mã Android cho bạn. - Ulysses Alves


Bạn có thể kiểm tra các biến máy chủ trên trang đang được yêu cầu để xem liệu nó có đến từ ứng dụng của bạn hay không và đặt biến javascript tương ứng

if($_SERVER['HTTP_X_REQUESTED_WITH'] == "com.company.app")
    echo 'var isAndroidApp=true;';
else
    echo 'var isAndroidApp=false;';
  • thay thế com.company.app bằng tên gói của bạn

5
2018-04-24 08:18