Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีเปิดใช้งาน Mixed Content ใน Android WebView

ภาพรวม

Mixed Content เกิดขึ้นเมื่อหน้าเว็บโหลดด้วย HTTPS แต่มีทรัพยากรบางส่วน (รูปภาพ สคริปต์ iframe) โหลดผ่าน HTTP แบบไม่ปลอดภ Android WebView บล็อก Mixed Content โดยค่าเริ่มต้น ต้องเปิดใช้งานอย่างชัดเจน

ขั้นตอนที่ 1-2: โปรเจกต์และ Layout

Layout ใช้ WebView แทน TextView:

<WebView
    android:id="@+id/web_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

ขั้นตอนที่ 3: โค้ด WebView Configuration

WebView webView = findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);

// เปิดใช้งาน Mixed Content (API 21+)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webView.getSettings().setMixedContentMode(
        WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE
    );
}

webView.loadUrl("https://www.tutorialspoint.com/");

โหมด Mixed Content ทั้ง 3 แบบ

โหมดค่าคงที่พฤติกรรม
Never (Default)MIXED_CONTENT_NEVER_ALLOWบล็อก HTTP ทั้งหมดบนหน้า HTTPS
CompatibilityMIXED_CONTENT_COMPATIBILITY_MODEอนุญาต HTTP สำหรับรูปภาพ/เสียง/วิดีโอ บล็อกสคริปต์/iframe
AlwaysMIXED_CONTENT_ALWAYS_ALLOWอนุญาต HTTP ทุกประเภท (ไม่แนะนำ - ไม่ปลอดภัย)

แนะนำ: ใช้ COMPATIBILITY_MODE

สมดุลระหว่างความปลอดภัยและความเข้ากันได้ เหมาะกับแอปที่ต้องแสดงเนื้อหาจากแหล่งเก่า

Manifest

<uses-permission android:name="android.permission.INTERNET"/>

ไม่ต้องการ READ_PHONE_STATE เพราะไม่เข้าถึงข้อมูลอุปกรณ์

ข้อควรระวัง

  • Android 8.0+ (API 26) บล็อก Cleartext HTTP โดยค่าเริ่มต้น ต้องเพิ่ม android:usesCleartextTraffic="true" ใน Application tag หรือใช้ Network Security Config
  • Google Play Policy ห้ามใช้ MIXED_CONTENT_ALWAYS_ALLOW ในแอปเผยแพร่