|
|
@@ -1128,7 +1128,13 @@
|
|
|
if (!m) return '';
|
|
|
var n = String(name);
|
|
|
var nl = n.toLowerCase();
|
|
|
- if (nl === 'imagepath' || nl === 'coverurl' || nl === 'userimage') {
|
|
|
+ if (
|
|
|
+ nl === 'imagepath' ||
|
|
|
+ nl === 'coverurl' ||
|
|
|
+ nl === 'userimage' ||
|
|
|
+ nl === 'item' ||
|
|
|
+ nl === 'dynamicitem'
|
|
|
+ ) {
|
|
|
var smart = extractUrlLikeShareQueryParam(m, n);
|
|
|
if (smart) return smart;
|
|
|
}
|
|
|
@@ -1174,15 +1180,29 @@
|
|
|
return 'shareCheckInUndefined.html' + (m ? ('?' + m) : '');
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 解析 item=/dynamicItem= 整段 JSON;支持 App 分享链 **双重 URL 编码**(decode 一次后仍为 %7B%22…)。
|
|
|
+ */
|
|
|
function tryParseJsonObject(raw) {
|
|
|
raw = String(raw == null ? '' : raw).trim();
|
|
|
if (!raw) return null;
|
|
|
- try {
|
|
|
- var o = JSON.parse(raw);
|
|
|
- return o && typeof o === 'object' && !Array.isArray(o) ? o : null;
|
|
|
- } catch (e) {
|
|
|
- return null;
|
|
|
+ var s = raw;
|
|
|
+ for (var t = 0; t < 5; t++) {
|
|
|
+ try {
|
|
|
+ var o = JSON.parse(s);
|
|
|
+ return o && typeof o === 'object' && !Array.isArray(o) ? o : null;
|
|
|
+ } catch (e) {
|
|
|
+ if (t >= 4) return null;
|
|
|
+ try {
|
|
|
+ var next = decodeURIComponent(String(s).replace(/\+/g, ' '));
|
|
|
+ if (next === s) return null;
|
|
|
+ s = next;
|
|
|
+ } catch (e2) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
/**
|