qb-pc-sdk 1.2.2 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/qb-pc-sdk.js +46 -6
- package/src/example-simple.html +3 -3
package/package.json
CHANGED
package/qb-pc-sdk.js
CHANGED
|
@@ -99,22 +99,62 @@
|
|
|
99
99
|
|
|
100
100
|
const baseUrl = getBaseUrl();
|
|
101
101
|
|
|
102
|
-
const loadScript = function (
|
|
102
|
+
const loadScript = function (primaryUrl, callback, fallbackUrl) {
|
|
103
|
+
if (document.querySelector('script[src="' + primaryUrl + '"]')) {
|
|
104
|
+
if (callback) callback();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (fallbackUrl && document.querySelector('script[src="' + fallbackUrl + '"]')) {
|
|
109
|
+
if (callback) callback();
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
|
|
103
113
|
const script = document.createElement("script");
|
|
104
|
-
script.src =
|
|
114
|
+
script.src = primaryUrl;
|
|
105
115
|
script.async = true;
|
|
116
|
+
|
|
106
117
|
script.onload = function () {
|
|
107
118
|
if (callback) callback();
|
|
108
119
|
};
|
|
120
|
+
|
|
109
121
|
script.onerror = function () {
|
|
110
|
-
console.error("[qb-pc-sdk] 加载失败:",
|
|
111
|
-
|
|
122
|
+
console.error("[qb-pc-sdk] 主 CDN 加载失败:", primaryUrl);
|
|
123
|
+
|
|
124
|
+
if (fallbackUrl) {
|
|
125
|
+
if (document.querySelector('script[src="' + fallbackUrl + '"]')) {
|
|
126
|
+
if (callback) callback();
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
console.log("[qb-pc-sdk] 尝试备用 CDN:", fallbackUrl);
|
|
131
|
+
const fallbackScript = document.createElement("script");
|
|
132
|
+
fallbackScript.src = fallbackUrl;
|
|
133
|
+
fallbackScript.async = true;
|
|
134
|
+
|
|
135
|
+
fallbackScript.onload = function () {
|
|
136
|
+
if (callback) callback();
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
fallbackScript.onerror = function () {
|
|
140
|
+
console.error("[qb-pc-sdk] 备用 CDN 也加载失败:", fallbackUrl);
|
|
141
|
+
window._qbPcSdkLoading = false;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
document.head.appendChild(fallbackScript);
|
|
145
|
+
} else {
|
|
146
|
+
window._qbPcSdkLoading = false;
|
|
147
|
+
}
|
|
112
148
|
};
|
|
149
|
+
|
|
113
150
|
document.head.appendChild(script);
|
|
114
151
|
};
|
|
115
152
|
|
|
116
153
|
const originSdkUrl = `${baseUrl}/qb-pc-ad-sdk-origin/dist/qb-pc-ad-sdk.v1.0.0.js`;
|
|
117
154
|
const wrapperSdkUrl = `${baseUrl}/qb-pc-sdk/src/ad-sdk-wrapper.js`;
|
|
155
|
+
|
|
156
|
+
const fallbackOriginSdkUrl = "https://unpkg.com/qb-pc-ad-sdk-origin@latest/dist/qb-pc-ad-sdk.v1.0.0.js";
|
|
157
|
+
const fallbackWrapperSdkUrl = "https://unpkg.com/qb-pc-sdk@latest/src/ad-sdk-wrapper.js";
|
|
118
158
|
|
|
119
159
|
let originSdkLoaded = false;
|
|
120
160
|
let wrapperSdkLoaded = false;
|
|
@@ -145,12 +185,12 @@
|
|
|
145
185
|
loadScript(originSdkUrl, function () {
|
|
146
186
|
originSdkLoaded = true;
|
|
147
187
|
checkBothLoaded();
|
|
148
|
-
});
|
|
188
|
+
}, fallbackOriginSdkUrl);
|
|
149
189
|
|
|
150
190
|
loadScript(wrapperSdkUrl, function () {
|
|
151
191
|
wrapperSdkLoaded = true;
|
|
152
192
|
checkBothLoaded();
|
|
153
|
-
});
|
|
193
|
+
}, fallbackWrapperSdkUrl);
|
|
154
194
|
})(
|
|
155
195
|
typeof window !== "undefined"
|
|
156
196
|
? window
|
package/src/example-simple.html
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Native广告异步加载测试</title>
|
|
7
|
-
<script src="https://file.qubiankeji.com/qb-pc-sdk/qb-pc-sdk.js" defer></script>
|
|
8
|
-
|
|
7
|
+
<!-- <script src="https://file.qubiankeji.com/qb-pc-sdk/qb-pc-sdk.js" defer></script> -->
|
|
8
|
+
<script src="../qb-pc-sdk.js" defer></script>
|
|
9
9
|
<style>
|
|
10
10
|
body { margin: 0; padding: 20px; font-family: sans-serif; background: #f0f2f5; }
|
|
11
11
|
.control-panel { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); margin-bottom: 20px; display: flex; gap: 15px; max-width: 900px; margin: 0 auto; }
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
}
|
|
78
78
|
});
|
|
79
79
|
|
|
80
|
-
// 2. 兜底轮询:防止由于
|
|
80
|
+
// 2. 兜底轮询:防止由于 async 脚本执行太快,导致事件监听器还没注册好就错过了事件
|
|
81
81
|
const checkReady = setInterval(() => {
|
|
82
82
|
if (window.AdSDK && !isSdkReady) {
|
|
83
83
|
clearInterval(checkReady);
|