front/IDE官网/assets/js/og-meta.js
2026-09-07 09:36:45 +08:00

79 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Open Graph:复用 <title> / meta[name=description],补齐绝对 og:url / og:image。
* 爬虫可读 head 内静态 meta;本脚本在浏览器中按当前域名校正。
*/
(function () {
var PROD_ORIGIN = 'https://ideship.com';
var OG_IMAGE_PATH = '/site/assets/img/og-cover.png';
var OG_IMAGE_REL = 'assets/img/og-cover.png';
function truncate(text, max) {
var value = String(text || '')
.replace(/\s+/g, ' ')
.trim();
if (value.length <= max) return value;
return value.slice(0, max);
}
function ensureMeta(property, content) {
if (!content) return;
var node = document.querySelector('meta[property="' + property + '"]');
if (!node) {
node = document.createElement('meta');
node.setAttribute('property', property);
document.head.appendChild(node);
}
node.setAttribute('content', content);
}
function resolveOrigin() {
if (location.protocol === 'http:' || location.protocol === 'https:') {
return location.origin;
}
return PROD_ORIGIN;
}
function resolvePageUrl(origin) {
if (location.protocol === 'file:') {
return /9610\.html$/i.test(location.pathname || '')
? PROD_ORIGIN + '/9610.html'
: PROD_ORIGIN + '/';
}
var path = location.pathname || '/';
if (/\/index\.html$/i.test(path)) {
path = path.replace(/\/index\.html$/i, '/') || '/';
}
if (path === '/site' || path === '/site/' || path === '/site/index.html') {
path = '/';
}
return origin + path + (location.search || '');
}
function resolveImageUrl(origin) {
if (origin === PROD_ORIGIN || /(^|\.)ideship\.com$/i.test(location.hostname || '')) {
return origin + OG_IMAGE_PATH;
}
try {
return new URL(OG_IMAGE_REL, location.href).href;
} catch (e) {
return origin + '/assets/img/og-cover.png';
}
}
function applyOpenGraph() {
var title = truncate(document.title, 30);
var descNode = document.querySelector('meta[name="description"]');
var description = truncate(descNode && descNode.getAttribute('content'), 60);
var origin = resolveOrigin();
ensureMeta('og:title', title);
if (description) ensureMeta('og:description', description);
ensureMeta('og:image', resolveImageUrl(origin));
ensureMeta('og:url', resolvePageUrl(origin));
ensureMeta('og:type', 'website');
}
applyOpenGraph();
window.IDEOpenGraph = { refresh: applyOpenGraph };
})();