diff --git a/components/SmartLink.js b/components/SmartLink.js
index c0a6ec79..3fedfeaf 100644
--- a/components/SmartLink.js
+++ b/components/SmartLink.js
@@ -1,23 +1,38 @@
import Link from 'next/link'
import { siteConfig } from '@/lib/config'
-// 保留允许传给 的属性
-const filterDOMProps = (props) => {
- const {
- passHref,
- legacyBehavior,
- ...rest
- } = props;
- return rest;
-};
+// 过滤 标签不能识别的 props
+const filterDOMProps = props => {
+ const { passHref, legacyBehavior, ...rest } = props
+ return rest
+}
+
const SmartLink = ({ href, children, ...rest }) => {
const LINK = siteConfig('LINK')
- const isExternal = href.startsWith('http') && !href.startsWith(LINK)
+
+ // 获取 URL 字符串用于判断是否是外链
+ let urlString = ''
+
+ if (typeof href === 'string') {
+ urlString = href
+ } else if (
+ typeof href === 'object' &&
+ href !== null &&
+ typeof href.pathname === 'string'
+ ) {
+ urlString = href.pathname
+ }
+
+ const isExternal = urlString.startsWith('http') && !urlString.startsWith(LINK)
if (isExternal) {
+ // 对于外部链接,必须是 string 类型
+ const externalUrl =
+ typeof href === 'string' ? href : new URL(href.pathname, LINK).toString()
+
return (
@@ -26,8 +41,9 @@ const SmartLink = ({ href, children, ...rest }) => {
)
}
+ // 内部链接(可为对象形式)
return (
-
+
{children}
)