اجازه دادن به کاربر برای به اشتراک گذاشتن وبسایتی که در آن قرار دارد، یک الگوی رایج در برنامههای وب است که میتوانید در بسیاری از سایتهای خبری، وبلاگها یا سایتهای خرید پیدا کنید. از آنجایی که لینک دادن یکی از قدرتهای فوقالعاده وب است، امید این است که از کاربرانی که لینک به اشتراک گذاشته شده را در سایتهای شبکههای اجتماعی میبینند یا آن را از طریق پیامهای چت یا حتی ایمیل دریافت میکنند، ترافیک جذب شود.
روش مدرن
استفاده از API اشتراکگذاری وب
API اشتراکگذاری وب به کاربر اجازه میدهد دادههایی مانند URL صفحهای که در آن قرار دارد را به همراه عنوان و متن توصیفی به اشتراک بگذارد. متد navigator.share() از API اشتراکگذاری وب، مکانیزم اشتراکگذاری بومی دستگاه را فراخوانی میکند. این متد یک promise را برمیگرداند و یک آرگومان واحد با دادههایی که قرار است به اشتراک گذاشته شوند، دریافت میکند. مقادیر ممکن عبارتند از:
-
url: رشتهای که نشاندهندهی URL مورد نظر برای اشتراکگذاری است. -
text: رشتهای که نشاندهنده متنی است که قرار است به اشتراک گذاشته شود. -
title: رشتهای که عنوانی را که قرار است به اشتراک گذاشته شود نشان میدهد. ممکن است توسط مرورگر نادیده گرفته شود.
روش کلاسیک
استفاده از هدف اشتراکگذاری یک سایت شبکه اجتماعی
هنوز همه مرورگرها از Web Share API پشتیبانی نمیکنند. بنابراین، یک راه حل جایگزین، ادغام با محبوبترین سایتهای شبکه اجتماعی مخاطبان هدف شماست. یک مثال محبوب، توییتر است که URL هدف وب آن امکان اشتراکگذاری یک متن و یک URL را فراهم میکند. این روش معمولاً شامل ایجاد یک URL و باز کردن آن در یک مرورگر است.
ملاحظات رابط کاربری
احترام به آیکون اشتراکگذاریِ تثبیتشدهی پلتفرم، مطابق با دستورالعملهای رابط کاربریِ فروشندگان سیستم عامل، اقدام خوبی است.
- ویندوز:
- اپل:
- اندروید و سایر سیستم عامل ها:
بهبود تدریجی
قطعه کد زیر در صورت پشتیبانی از Web Share API از آن استفاده میکند و سپس به URL هدف وب توییتر برمیگردد.
// 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');
});
مطالعه بیشتر
نسخه آزمایشی
اچتیامال
<!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>سی اس اس
: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');
}
جیاس
// 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');
});