วิธีให้ผู้ใช้แชร์เว็บไซต์ที่เข้าชม

การอนุญาตให้ผู้ใช้แชร์เว็บไซต์ที่ตนใช้อยู่เป็นรูปแบบเว็บแอปทั่วไปที่คุณจะพบในเว็บไซต์ข่าว บล็อก หรือเว็บไซต์ช็อปปิ้งจำนวนมาก เนื่องจากการลิงก์เป็นหนึ่งในพลังพิเศษของเว็บ เราหวังว่าจะได้รับการเข้าชมจากผู้ใช้ที่เห็นลิงก์ที่แชร์ในเว็บไซต์โซเชียลเน็ตเวิร์ก หรือผู้ใช้ที่ได้รับลิงก์ผ่านข้อความแชท หรือแม้กระทั่งแบบดั้งเดิมผ่านอีเมล

แนวทางสมัยใหม่

การใช้ Web Share API

Web Share API ช่วยให้ผู้ใช้แชร์ข้อมูล เช่น URL ของหน้าเว็บที่ผู้ใช้อยู่ รวมถึงชื่อและข้อความอธิบายได้ เมธอด navigator.share() ของ Web Share API จะเรียกใช้กลไกการแชร์แบบดั้งเดิมของอุปกรณ์ ซึ่งจะแสดงผลสัญญาและใช้อาร์กิวเมนต์เดียวพร้อมด้วยข้อมูลที่จะแชร์ ค่าที่เป็นไปได้มีดังนี้

  • url: สตริงที่แสดงถึง URL ที่จะแชร์
  • text: สตริงที่แสดงถึงข้อความที่จะแชร์
  • title: สตริงที่แสดงถึงชื่อที่จะแชร์ เบราว์เซอร์อาจไม่สนใจ

การสนับสนุนเบราว์เซอร์

  • 89
  • 93
  • 12.1

แหล่งที่มา

วิธีคลาสสิก

การใช้จุดประสงค์ในการแชร์ของเว็บไซต์โซเชียลเน็ตเวิร์ก

เบราว์เซอร์บางประเภทยังไม่รองรับ Web Share API ดังนั้นจึงควรผสานรวมกับเว็บไซต์โซเชียลเน็ตเวิร์กที่ได้รับความนิยมสูงสุดในกลุ่มเป้าหมายของคุณ ตัวอย่างที่ได้รับความนิยมคือ Twitter ซึ่ง URL ของ Web Intent ช่วยให้แชร์ข้อความและ URL ได้ โดยทั่วไปวิธีการนี้จะประกอบด้วย การสร้าง URL และเปิดในเบราว์เซอร์

ข้อควรพิจารณาเกี่ยวกับ UI

คุณควรเคารพไอคอนแชร์ที่แพลตฟอร์มสร้างขึ้นตามหลักเกณฑ์ UI ของผู้ให้บริการระบบปฏิบัติการ

  • Windows:
  • Apple:
  • Android และระบบปฏิบัติการอื่นๆ:

การเพิ่มประสิทธิภาพแบบต่อเนื่อง

ตัวอย่างข้อมูลด้านล่างใช้ Web Share API เมื่อระบบรองรับ จากนั้นจะกลับไปที่ URL ของ Web Intent ของ Twitter

// DOM references
const button = document.querySelector('button');
const icon = button.querySelector('.icon');
const canonical = document.querySelector('link[rel="canonical"]');

// Find out if the user is on a device made by Apple.
const IS_MAC = /Mac|iPhone/.test(navigator.platform);
// Find out if the user is on a Windows device.
const IS_WINDOWS = /Win/.test(navigator.platform);
// For Apple devices or Windows, use the platform-specific share icon.
icon.classList.add(`share${IS_MAC? 'mac' : (IS_WINDOWS? 'windows' : '')}`);

button.addEventListener('click', async () => {
  // Title and text are identical, since the title may actually be ignored.
  const title = document.title;
  const text = document.title;
  // Use the canonical URL, if it exists, else, the current location.
  const url = canonical?.href || location.href;

  // Feature detection to see if the Web Share API is supported.
  if ('share' in navigator) {
    try {
      await navigator.share({
        url,
        text,
        title,
      });
      return;
    } catch (err) {
      // If the user cancels, an `AbortError` is thrown.
      if (err.name !== "AbortError") {
        console.error(err.name, err.message);
      }
    }
  }
  // Fallback to use Twitter's Web Intent URL.
  // (https://developer.twitter.com/en/docs/twitter-for-websites/tweet-button/guides/web-intent)
  const shareURL = new URL('https://twitter.com/intent/tweet');
  const params = new URLSearchParams();
  params.append('text', text);
  params.append('url', url);
  shareURL.search = params;
  window.open(shareURL, '_blank', 'popup,noreferrer,noopener');
});

อ่านเพิ่มเติม

ข้อมูลประชากร

HTML

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>How to let the user share the website they are on</title>
    <link rel="stylesheet" href="style.css" />
    <!-- TODO: Devsite - Removed inline handlers -->
    <!-- <script src="script.js" defer></script> -->
  </head>
  <body>
    <h1>How to let the user share the website they are on</h1>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin at libero
      eget ante congue molestie. Integer varius enim leo. Duis est nisi,
      ullamcorper et posuere eu, mattis sed lorem. Lorem ipsum dolor sit amet,
      consectetur adipiscing elit. In at suscipit erat, et sollicitudin lorem.
    </p>
    <img src="https://placekitten.com/400/300" width=400 height=300>
    <p>
      In euismod ornare scelerisque. Nunc imperdiet augue ac porttitor
      porttitor. Pellentesque habitant morbi tristique senectus et netus et
      malesuada fames ac turpis egestas. Curabitur eget pretium elit, et
      interdum quam.
    </p>
    <hr />
    <button type="button"><span class="icon"></span>Share</button>
  </body>
</html>

CSS


        :root {
  color-scheme: dark light;
}

html {
  box-sizing: border-box;
}

*, *:before, *:after {
  box-sizing: inherit;
}

body {
  margin: 1rem;
  font-family: system-ui, sans-serif;
}

img,
video {
  height: auto;
  max-width: 100%;
}

button {
  display: flex;
}

button .icon {
  display: inline-block;
  width: 1em;
  height: 1em;
  background-size: 1em;
}

@media (prefers-color-scheme: dark) {
  button .icon {
    filter: invert();
  }
}

.share {
  background-image: url('share.svg');
}

.sharemac {
  background-image: url('sharemac.svg');
}
        

JS


        // DOM references
const button = document.querySelector('button');
const icon = button.querySelector('.icon');
const canonical = document.querySelector('link[rel="canonical"]');

// Find out if the user is on a device made by Apple.
const IS_MAC = /Mac|iPhone/.test(navigator.platform);
// Find out if the user is on a Windows device.
const IS_WINDOWS = /Win/.test(navigator.platform);
// For Apple devices or Windows, use the platform-specific share icon.
icon.classList.add(`share${IS_MAC? 'mac' : (IS_WINDOWS? 'windows' : '')}`);

button.addEventListener('click', async () => {
  // Title and text are identical, since the title may actually be ignored.
  const title = document.title;
  const text = document.title;
  // Use the canonical URL, if it exists, else, the current location.
  const url = canonical?.href || location.href;

  // Feature detection to see if the Web Share API is supported.
  if ('share' in navigator) {
    try {
      await navigator.share({
        url,
        text,
        title,
      });
      return;
    } catch (err) {
      // If the user cancels, an `AbortError` is thrown.
      if (err.name !== "AbortError") {
        console.error(err.name, err.message);
      }
    }
  }
  // Fallback to use Twitter's Web Intent URL.
  // (https://developer.twitter.com/en/docs/twitter-for-websites/tweet-button/guides/web-intent)
  const shareURL = new URL('https://twitter.com/intent/tweet');
  const params = new URLSearchParams();
  params.append('text', text);
  params.append('url', url);
  shareURL.search = params;
  window.open(shareURL, '_blank', 'popup,noreferrer,noopener');
});