daohang
This commit is contained in:
parent
ef38d966f7
commit
8d30dfa847
@ -118,20 +118,6 @@
|
||||
"type": "application/octet-stream",
|
||||
"fetchedAt": "2026-10-22T13:47:02.445Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.jskcloud.net/web/default/img/tick.png",
|
||||
"file": "assets/bdfe612023a80a-tick.png",
|
||||
"status": 200,
|
||||
"type": "image/png",
|
||||
"fetchedAt": "2026-10-22T13:40:21.188Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.jskcloud.net/web/default/img/block.jpg",
|
||||
"file": "assets/ba39333ee963c2-block.jpg",
|
||||
"status": 200,
|
||||
"type": "image/jpeg",
|
||||
"fetchedAt": "2026-10-22T13:40:21.276Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.jskcloud.net/web/default/assets/img/cloud/banner.png",
|
||||
"file": "assets/b40cf882b1127d-banner.png",
|
||||
@ -279,6 +265,20 @@
|
||||
"type": "image/svg+xml",
|
||||
"fetchedAt": "2026-10-22T13:47:17.635Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.jskcloud.net/web/default/img/tick.png",
|
||||
"file": "assets/bdfe612023a80a-tick.png",
|
||||
"status": 200,
|
||||
"type": "image/png",
|
||||
"fetchedAt": "2026-10-22T13:40:21.188Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.jskcloud.net/web/default/img/block.jpg",
|
||||
"file": "assets/ba39333ee963c2-block.jpg",
|
||||
"status": 200,
|
||||
"type": "image/jpeg",
|
||||
"fetchedAt": "2026-10-22T13:40:21.276Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.jskcloud.net/upload/common/default/74c4c12ef2b78186888430001904a1b01742551035%5E%E5%8A%A0%E5%88%A9%E7%A6%8F%E5%B0%BC%E4%BA%9A%E6%95%B0%E6%8D%AE%E5%BA%93+01.jpg",
|
||||
"file": "assets/c1581d8dced87c-74c4c12ef2b78186888430001904a1b01742551035----------01.jpg",
|
||||
@ -461,13 +461,6 @@
|
||||
"type": "text/css",
|
||||
"fetchedAt": "2026-10-22T13:40:59.942Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.jskcloud.net/web/default/css/document.css",
|
||||
"file": "assets/b828918322b016-document.css",
|
||||
"status": 200,
|
||||
"type": "text/css",
|
||||
"fetchedAt": "2026-10-22T13:41:35.623Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.jskcloud.net/web/default/assets/img/index/hot.png",
|
||||
"file": "assets/d0407c6b7e7dbe-hot.png",
|
||||
@ -606,6 +599,13 @@
|
||||
"type": "image/png",
|
||||
"fetchedAt": "2026-10-22T13:47:29.257Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.jskcloud.net/web/default/css/document.css",
|
||||
"file": "assets/b828918322b016-document.css",
|
||||
"status": 200,
|
||||
"type": "text/css",
|
||||
"fetchedAt": "2026-10-22T13:41:35.623Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.jskcloud.net/web/default/assets/img/solution/e-commerce.png",
|
||||
"file": "assets/8480857bb458e8-e-commerce.png",
|
||||
@ -836,6 +836,20 @@
|
||||
"type": "text/plain; charset=utf-8",
|
||||
"fetchedAt": "2026-10-22T14:03:42.699Z"
|
||||
},
|
||||
{
|
||||
"url": "https://fonts.gstatic.com/l/font?kit=k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaG9_FnYxVgvM0R8yuTKSLk9wN6H62nf7yB_LXat31sSlu5zunZdC2PLv3Wh7BN9k0bqluqLrqZmiXHFlxXwj-3FCp570tPzelv49sYnizvfUlg7keSu3RkHKYrAZqva1iavEjdR2pRX7Y6wZ2LKHRjSoLtzPSNChzqjPDT3PHHMbh-QCsEBOfqPVe67Anq4IA5nOBi8nlsqokKEmSeB9S4JUigv-ia7XmjGNrT5i6R9OTwT35727mrjOPtp3b0LUBAsSlyzNVurqmNLLRsn4JNiTBVxJVe_hEv72ofzwNlY1x-qEC3mTF4n6EUKJ4yGRbwyfUBubH_AV3LJe4w84hROuh_d_xY164ohCTKCiXTxZE1XYRPIR32tyEazK6jRnkcHRs0i-dBOVG5E2qBuCGa_fvsC5UHzqE2e4EZgMyUln67Lk4JZepv_WcEo3bmrjOtMsSzefZW-QwRS3qYGBbEHECgegsSkY4l4w_0lKqxrUiwZmzCsO5lrlf3l3NY7JhOnTPF2t_trI9Il6iLSDNthswkF8lqZiB6yvnepLy_QJR6DIB6570l-VoK38ebMEN1UQcns1onI75kJGSKzNHGpmRZJXPrw5YAM-8Nmfv6sOCO9UIpvyKhFmMzlx-E4eD2cZAPb6X-tNkeCdSJL2_zhz3bQpNcxPP7fCKcsSb_qwhBOJdau9d9b2WlKJOhqVw28yJKCh7VZzrgpdNyQUEWrta43I65yJVEqY3jwHe1Po8bLQqx28OhnfivxqKa2tnF0va_juh9Ou7gcpaaz9UpZbfDreiQLRIMtHupVM595PRPRSmNyQ4wPrL5fHMspNTrs6DroiuCQKEu0BuIYwmAVYNLbdtFIZPuvd7f7I4RAjsn-6aCFDTTgKAoVpa41W2OW3J3FMVPNymDxgF9pw3XaxriFruL9qm0dy-usYT0raLR7PxzF6-B30hISjJUw32bPbbI1j4SUGmpgTC2cb8UMs6Wyr46JcBOZKmIjrfd0JEjEcSkekyMvWcQEVuZNmGBA4ICEolU35wtRtgNT2o1tJjWbW_G18FawG-VY339eFhVqnWVjI1S93RBlnTqvkB3i6FNrSsj5lwlEsdqAwiUxDOLpm7iZME959dkICTlsHsZpX6SI8ZOIz2BKcaiW5xPLclQW1bJXJlMfgvCX9LJZq8kfb8fYhDiQ8_GLCp5jDLmF2pSsekndHzhou5XpUzsJtw_5j-vUD718hcI3rC18mf0fVNafAozv4548xT4-PWRSlqIh5o-BhVKv2pQjC-snySt3LkOuJRnxHl7Xms2BLXUxJHZCuKbw9IavAwekIMPBgiZkJnIbVklgTnphDdH1w&skey=cf0bb10b5602fdc3&v=v41",
|
||||
"file": "assets/5242942a137342-font.bin",
|
||||
"status": 200,
|
||||
"type": "font/ttf",
|
||||
"fetchedAt": "2026-10-22T14:03:42.992Z"
|
||||
},
|
||||
{
|
||||
"url": "https://fonts.gstatic.com/l/font?kit=k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaGzjCnYxVgvM0R8yuTKSLk9wN6H62nf7yB_LXat31sSlu5zunZdC2PLv3Wh7BN9k0bqluqLrqZmiXHFlxXwj-3FCp570tPzelv49sYnizvfUlg7keSu3RkHKYrAZqva1iavEjdR2pRX7Y6wZ2LKHRjSoLtzPSNChzqjPDT3PHHMbh-QCsEBOfqPVe67Anq4IA5nOBi8nlsqokKEmSeB9S4JUigv-ia7XmjGNrT5i6R9OTwT35727mrjOPtp3b0LUBAsSlyzNVurqmNLLRsn4JNiTBVxJVe_hEv72ofzwNlY1x-qEC3mTF4n6EUKJ4yGRbwyfUBubH_AV3LJe4w84hROuh_d_xY164ohCTKCiXTxZE1XYRPIR32tyEazK6jRnkcHRs0i-dBOVG5E2qBuCGa_fvsC5UHzqE2e4EZgMyUln67Lk4JZepv_WcEo3bmrjOtMsSzefZW-QwRS3qYGBbEHECgegsSkY4l4w_0lKqxrUiwZmzCsO5lrlf3l3NY7JhOnTPF2t_trI9Il6iLSDNthswkF8lqZiB6yvnepLy_QJR6DIB6570l-VoK38ebMEN1UQcns1onI75kJGSKzNHGpmRZJXPrw5YAM-8Nmfv6sOCO9UIpvyKhFmMzlx-E4eD2cZAPb6X-tNkeCdSJL2_zhz3bQpNcxPP7fCKcsSb_qwhBOJdau9d9b2WlKJOhqVw28yJKCh7VZzrgpdNyQUEWrta43I65yJVEqY3jwHe1Po8bLQqx28OhnfivxqKa2tnF0va_juh9Ou7gcpaaz9UpZbfDreiQLRIMtHupVM595PRPRSmNyQ4wPrL5fHMspNTrs6DroiuCQKEu0BuIYwmAVYNLbdtFIZPuvd7f7I4RAjsn-6aCFDTTgKAoVpa41W2OW3J3FMVPNymDxgF9pw3XaxriFruL9qm0dy-usYT0raLR7PxzF6-B30hISjJUw32bPbbI1j4SUGmpgTC2cb8UMs6Wyr46JcBOZKmIjrfd0JEjEcSkekyMvWcQEVuZNmGBA4ICEolU35wtRtgNT2o1tJjWbW_G18FawG-VY339eFhVqnWVjI1S93RBlnTqvkB3i6FNrSsj5lwlEsdqAwiUxDOLpm7iZME959dkICTlsHsZpX6SI8ZOIz2BKcaiW5xPLclQW1bJXJlMfgvCX9LJZq8kfb8fYhDiQ8_GLCp5jDLmF2pSsekndHzhou5XpUzsJtw_5j-vUD718hcI3rC18mf0fVNafAozv4548xT4-PWRSlqIh5o-BhVKv2pQjC-snySt3LkOuJRnxHl7Xms2BLXUxJHZCuKbw9IavAwekIMPBgiZkJnIbVklgTnphDdH1w&skey=cf0bb10b5602fdc3&v=v41",
|
||||
"file": "assets/ebb1d345c619fa-font.bin",
|
||||
"status": 200,
|
||||
"type": "font/ttf",
|
||||
"fetchedAt": "2026-10-22T14:03:43.164Z"
|
||||
},
|
||||
{
|
||||
"url": "https://fonts.gstatic.com/l/font?kit=k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaG9_FnYxV2P0wfPGqcLWPr9oJ1FWyoev2O9rTVuXxjixq2BSjWvuyA4P8Ww7KNsg_b7BlqLjhZmGcHG96Xy713k6i5bwmPSmuuqxnZHe4u_cuhaMVTPPamV6TpQJhtLJpYuQofQuiTkLT4iJ9JZTagyEAuCrZOBV4uB3IXGjMDcLq6D6nBCaUvd9V8IEssLYL-lOKqOrukYkvC2GZWwhZw4cpoe6pS6HtrGVgb4yxZ8OY4Rbyz0btiy-Ek4XQ9Z0KJ-2u7gpen7OtEbTalkMFKSDNSBVZZPlIoL6kYCUBiqN95YkOwU_J8miIQLx02HRX0yzYFtrL7Ap7PJy009UtVP2t7Pr9cki0swyfOTqbXyJIxUwdLL57yduIeCC2nh_oY2hgwhaRFeZK9VamF_2KetfjpiJYCCGIzuIIcT8-RXL2-5A0MbOlq9mQBovXjrHCoMMe2fPVTss8UBjmdVJXBUAOlNggX280g5UzxnWm0pcu1am_Hvi1gpVTynfBd6ttLmzDBExzpZ4xMXCuPgHBujg8nHUppYqN5g_rd4n-8hld5x8N5LH4mMFkJFESYtsB218QkNhkkaT1na6eJhRLEIudbq3DpRlUCtawPU3j4fOOMM0ErNOHsVaB-1tzJryO7O5NC4eazfppTiRfEqiy-yr6WBFARgrC19OHSeuWxLEsOtFQVdpQzYybrapDv7N94vGEECl2bbvmurVA8RsJYqFX2Fk33BhYKbQ6tTXT7s4xVown_UgDvFrvhguHUnhqLlzXxyqszeS2uMNXUjlZnInSN7SvebhFCurionM18KjdOi2qPys0yOTH7fnAuptfpvePprCiARaIs1tiKKAqCG0BJI9hHaJDs9t3d6A0TCXgl_KWA2HfRSyMqn1W6Eq6MWLF1VMZNcCqBhoJ-JM7U6ZnhEjiI8-q3fOyscwf2bGHTLn9x12yB0MtIR3FUBj6bvnXPk_0Vl2quQLOxs7wTsQ2Qhj08rsNIqyqOTfTb3hIlU4eiPk-K92QWFJifOWKHDYEEGkpS198rQNsIgykwc9vT4CzDWoJfSayQ5z7_NJtX5naXDQ5Qd_dDEffoPwN1BOJPIOghZ18nk4RozcuWRTCJJO3g5II_ZlRnoyfmNvgaJz2RpwVNo36DasWg3t9NpEpS0FXE3dpB9QjMFJHHLOwq9rwRqhPsx0zIp2l3ArHomClcNSop97_vIC1ZJI_ja58wZHyg1D36cFQHUrO6eST7-dBV_4k9-E12MBf2NvacjxmFQpkzQBZH8aldhOyhl6eu3HoNsNdkj_p_W6gwC3bSh1LezeGcBZEct06YlUGJAooflRtOZlujjztvizXB2q6DkuBIIYO6utvLvKabxrD66u53uLy-gUOHheRPtJd26ptEYTiaiqPBSgRJ0q9tDmFg7zFixwBPfTk1Bh12Pq96QBZQZh2NJcUL047cjEq7a6MKqX6p_lZoGj7xpthGc0pFbYepUeX2hjkEOV9nauY5exP1akOGxclheG5j7rDb5-O11dayP_zS-Kx1hlHPJ-d_K0DYZuRYn31Ppg1AbIhdENexp-UZYbHvVMIFK5_mu1gLxcgjQP5lJVXp6DqOBNLggAQ-6E&skey=cf0bb10b5602fdc3&v=v41",
|
||||
"file": "assets/2f8dd1cc85ff21-font.bin",
|
||||
@ -863,19 +877,5 @@
|
||||
"status": 200,
|
||||
"type": "font/ttf",
|
||||
"fetchedAt": "2026-10-22T14:03:43.058Z"
|
||||
},
|
||||
{
|
||||
"url": "https://fonts.gstatic.com/l/font?kit=k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaG9_FnYxVgvM0R8yuTKSLk9wN6H62nf7yB_LXat31sSlu5zunZdC2PLv3Wh7BN9k0bqluqLrqZmiXHFlxXwj-3FCp570tPzelv49sYnizvfUlg7keSu3RkHKYrAZqva1iavEjdR2pRX7Y6wZ2LKHRjSoLtzPSNChzqjPDT3PHHMbh-QCsEBOfqPVe67Anq4IA5nOBi8nlsqokKEmSeB9S4JUigv-ia7XmjGNrT5i6R9OTwT35727mrjOPtp3b0LUBAsSlyzNVurqmNLLRsn4JNiTBVxJVe_hEv72ofzwNlY1x-qEC3mTF4n6EUKJ4yGRbwyfUBubH_AV3LJe4w84hROuh_d_xY164ohCTKCiXTxZE1XYRPIR32tyEazK6jRnkcHRs0i-dBOVG5E2qBuCGa_fvsC5UHzqE2e4EZgMyUln67Lk4JZepv_WcEo3bmrjOtMsSzefZW-QwRS3qYGBbEHECgegsSkY4l4w_0lKqxrUiwZmzCsO5lrlf3l3NY7JhOnTPF2t_trI9Il6iLSDNthswkF8lqZiB6yvnepLy_QJR6DIB6570l-VoK38ebMEN1UQcns1onI75kJGSKzNHGpmRZJXPrw5YAM-8Nmfv6sOCO9UIpvyKhFmMzlx-E4eD2cZAPb6X-tNkeCdSJL2_zhz3bQpNcxPP7fCKcsSb_qwhBOJdau9d9b2WlKJOhqVw28yJKCh7VZzrgpdNyQUEWrta43I65yJVEqY3jwHe1Po8bLQqx28OhnfivxqKa2tnF0va_juh9Ou7gcpaaz9UpZbfDreiQLRIMtHupVM595PRPRSmNyQ4wPrL5fHMspNTrs6DroiuCQKEu0BuIYwmAVYNLbdtFIZPuvd7f7I4RAjsn-6aCFDTTgKAoVpa41W2OW3J3FMVPNymDxgF9pw3XaxriFruL9qm0dy-usYT0raLR7PxzF6-B30hISjJUw32bPbbI1j4SUGmpgTC2cb8UMs6Wyr46JcBOZKmIjrfd0JEjEcSkekyMvWcQEVuZNmGBA4ICEolU35wtRtgNT2o1tJjWbW_G18FawG-VY339eFhVqnWVjI1S93RBlnTqvkB3i6FNrSsj5lwlEsdqAwiUxDOLpm7iZME959dkICTlsHsZpX6SI8ZOIz2BKcaiW5xPLclQW1bJXJlMfgvCX9LJZq8kfb8fYhDiQ8_GLCp5jDLmF2pSsekndHzhou5XpUzsJtw_5j-vUD718hcI3rC18mf0fVNafAozv4548xT4-PWRSlqIh5o-BhVKv2pQjC-snySt3LkOuJRnxHl7Xms2BLXUxJHZCuKbw9IavAwekIMPBgiZkJnIbVklgTnphDdH1w&skey=cf0bb10b5602fdc3&v=v41",
|
||||
"file": "assets/5242942a137342-font.bin",
|
||||
"status": 200,
|
||||
"type": "font/ttf",
|
||||
"fetchedAt": "2026-10-22T14:03:42.992Z"
|
||||
},
|
||||
{
|
||||
"url": "https://fonts.gstatic.com/l/font?kit=k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaGzjCnYxVgvM0R8yuTKSLk9wN6H62nf7yB_LXat31sSlu5zunZdC2PLv3Wh7BN9k0bqluqLrqZmiXHFlxXwj-3FCp570tPzelv49sYnizvfUlg7keSu3RkHKYrAZqva1iavEjdR2pRX7Y6wZ2LKHRjSoLtzPSNChzqjPDT3PHHMbh-QCsEBOfqPVe67Anq4IA5nOBi8nlsqokKEmSeB9S4JUigv-ia7XmjGNrT5i6R9OTwT35727mrjOPtp3b0LUBAsSlyzNVurqmNLLRsn4JNiTBVxJVe_hEv72ofzwNlY1x-qEC3mTF4n6EUKJ4yGRbwyfUBubH_AV3LJe4w84hROuh_d_xY164ohCTKCiXTxZE1XYRPIR32tyEazK6jRnkcHRs0i-dBOVG5E2qBuCGa_fvsC5UHzqE2e4EZgMyUln67Lk4JZepv_WcEo3bmrjOtMsSzefZW-QwRS3qYGBbEHECgegsSkY4l4w_0lKqxrUiwZmzCsO5lrlf3l3NY7JhOnTPF2t_trI9Il6iLSDNthswkF8lqZiB6yvnepLy_QJR6DIB6570l-VoK38ebMEN1UQcns1onI75kJGSKzNHGpmRZJXPrw5YAM-8Nmfv6sOCO9UIpvyKhFmMzlx-E4eD2cZAPb6X-tNkeCdSJL2_zhz3bQpNcxPP7fCKcsSb_qwhBOJdau9d9b2WlKJOhqVw28yJKCh7VZzrgpdNyQUEWrta43I65yJVEqY3jwHe1Po8bLQqx28OhnfivxqKa2tnF0va_juh9Ou7gcpaaz9UpZbfDreiQLRIMtHupVM595PRPRSmNyQ4wPrL5fHMspNTrs6DroiuCQKEu0BuIYwmAVYNLbdtFIZPuvd7f7I4RAjsn-6aCFDTTgKAoVpa41W2OW3J3FMVPNymDxgF9pw3XaxriFruL9qm0dy-usYT0raLR7PxzF6-B30hISjJUw32bPbbI1j4SUGmpgTC2cb8UMs6Wyr46JcBOZKmIjrfd0JEjEcSkekyMvWcQEVuZNmGBA4ICEolU35wtRtgNT2o1tJjWbW_G18FawG-VY339eFhVqnWVjI1S93RBlnTqvkB3i6FNrSsj5lwlEsdqAwiUxDOLpm7iZME959dkICTlsHsZpX6SI8ZOIz2BKcaiW5xPLclQW1bJXJlMfgvCX9LJZq8kfb8fYhDiQ8_GLCp5jDLmF2pSsekndHzhou5XpUzsJtw_5j-vUD718hcI3rC18mf0fVNafAozv4548xT4-PWRSlqIh5o-BhVKv2pQjC-snySt3LkOuJRnxHl7Xms2BLXUxJHZCuKbw9IavAwekIMPBgiZkJnIbVklgTnphDdH1w&skey=cf0bb10b5602fdc3&v=v41",
|
||||
"file": "assets/ebb1d345c619fa-font.bin",
|
||||
"status": 200,
|
||||
"type": "font/ttf",
|
||||
"fetchedAt": "2026-10-22T14:03:43.164Z"
|
||||
}
|
||||
]
|
||||
|
||||
@ -1,3 +1,13 @@
|
||||
html{scroll-behavior:smooth}img{max-width:100%}.static-main{max-width:1200px;margin:0 auto;padding:120px 24px 72px;min-height:55vh}.static-main h1{font-size:34px;line-height:1.35;margin:0 0 24px}.static-main h2{font-size:24px;line-height:1.45;margin:32px 0 16px}.static-main p{line-height:1.8}.static-article{max-width:960px;overflow-wrap:anywhere}.static-article img{height:auto;max-width:100%}.static-article p{margin:1em 0}.static-article ul,.static-article ol{padding-left:1.5em;list-style:revert}.static-article table{max-width:100%;display:block;overflow-x:auto}.static-article pre{white-space:pre-wrap}.static-date{color:#7c8494;font-size:14px;margin-bottom:28px}.static-list{margin:0;padding:0;list-style:none}.static-list>li{display:flex;align-items:baseline;justify-content:space-between;gap:24px;padding:18px 0;border-bottom:1px solid #e6e9ef}.static-list a{color:inherit;line-height:1.6}.static-list a:hover{color:#2978e7}.static-list time{white-space:nowrap;color:#7c8494;font-size:14px}.static-back{display:inline-block;margin-top:36px;color:#2978e7}.static-table-wrap{overflow-x:auto;margin:24px 0}.static-table{border-collapse:collapse;width:100%;text-align:left;min-width:560px}.static-table th,.static-table td{padding:16px 18px;border:1px solid #e2e7ef;line-height:1.65}.static-table th{background:#f6f8fc}.static-table caption{text-align:left;font-size:22px;font-weight:600;padding:16px 0}.static-table td:first-child{min-width:130px}.static-search{display:flex;gap:12px;margin:24px 0}.static-search input{flex:1;min-width:0;padding:12px 14px;border:1px solid #cbd2dc;border-radius:4px;font:inherit}.static-search button{background:#2875dd;border:0;border-radius:4px;padding:12px 24px;color:white;font:inherit;cursor:pointer}.static-pagination{display:flex;flex-wrap:wrap;gap:8px;margin:28px 0}.static-pagination a,.static-pagination span{padding:8px 13px;border:1px solid #dce2ec;border-radius:3px}.static-pagination [aria-current]{background:#2875dd;color:white}.static-lightbox{border:0;background:transparent;padding:40px;max-width:98vw;max-height:98vh;overflow:auto}.static-lightbox::backdrop{background:#000c}.static-lightbox img{max-width:90vw;max-height:86vh;object-fit:contain}.static-lightbox button{position:fixed;top:16px;right:24px;background:#fff;color:#222;border:0;border-radius:50%;width:40px;height:40px;font-size:28px;cursor:pointer}.language-option a,a.language-option{color:inherit;text-decoration:none}.language-dropdown a.language-option{display:flex}.static-empty{padding:24px;color:#7c8494}[data-filter-row][hidden]{display:none!important}.nav-cont a,.uk-navbar-dropdown a{overflow-wrap:anywhere}.config-container{max-width:100%;overflow-x:auto}body{overflow-x:hidden}
|
||||
@media(max-width:900px){.static-main{padding-top:96px;padding-inline:18px}.static-main h1{font-size:27px}.static-main h2{font-size:21px}.static-list>li{gap:12px;flex-wrap:wrap}.static-table th,.static-table td{padding:12px}.static-lightbox{padding:8px}.nav-menu.active .nav-cont.active{display:block!important;height:auto!important;visibility:visible!important;opacity:1!important}.nav-menu.active>.nav-cont,.nav-menu.active>div{max-width:100%}.static-search button{padding-inline:16px}.static-date{font-size:13px}.config-table{min-width:700px}.advantage-list,.practice-content,.brand-group{max-width:100%}}
|
||||
body[data-static-site="jskcloud"]{font-family:"Microsoft YaHei",Arial,"Noto Sans SC","Noto Sans KR",sans-serif}body[data-static-site="scck"]{--font-family:Montserrat,"Microsoft YaHei","Noto Sans SC","Noto Sans KR",Arial,sans-serif;font-family:var(--font-family)}button,input,select,textarea{font-family:inherit}
|
||||
body[data-static-site="jskcloud"] .nav-menu>div{position:relative}
|
||||
body[data-static-site="jskcloud"] .nav-header{position:relative}
|
||||
body[data-static-site="jskcloud"] .nav-menu .nav-cont{display:none;top:100%;left:0;width:240px;max-width:calc(100vw - 32px);background:#fff;box-shadow:0 5px 12px #0002;z-index:1000}
|
||||
body[data-static-site="jskcloud"] .nav-menu .nav-cont.active,body[data-static-site="jskcloud"] .nav-menu .nav-cont.active .nav-cont-menu{display:block}
|
||||
body[data-static-site="jskcloud"] .nav-menu .nav-cont-menu{animation:none}
|
||||
body[data-static-site="jskcloud"] .nav-cont>.section-content{width:100%;max-width:none}
|
||||
body[data-static-site="jskcloud"] .nav-content a{display:block;width:100%}
|
||||
body[data-static-site="jskcloud"] .nav-item-box{min-width:0;height:auto;min-height:48px;padding:14px 16px}
|
||||
body[data-static-site="jskcloud"] .nav-item-box .item-box-title{margin-left:0}
|
||||
@media(max-width:768px){body[data-static-site="jskcloud"] .nav-menu{top:100%;max-height:calc(100dvh - 110px);overflow-y:auto}body[data-static-site="jskcloud"] .nav-menu .nav-cont{position:static;width:100%;max-width:none;box-shadow:none}body[data-static-site="jskcloud"] .nav-item-box{padding:12px 32px;background:#f9f9f9}}
|
||||
|
||||
@ -1,18 +1,67 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
var mobile = document.getElementById('mobileMenuBtn');
|
||||
if (mobile) mobile.addEventListener('click', function () {
|
||||
var menu = document.querySelector('.nav-menu');
|
||||
var right = document.querySelector('.nav-right');
|
||||
if (menu) { menu.classList.toggle('active'); mobile.setAttribute('aria-expanded', String(menu.classList.contains('active'))); }
|
||||
if (right) right.classList.toggle('active');
|
||||
});
|
||||
var navMenu = document.querySelector('.nav-menu');
|
||||
var navRight = document.querySelector('.nav-right');
|
||||
var mobileViewport = window.matchMedia('(max-width: 768px)');
|
||||
var navItems = [];
|
||||
function setNavOpen(item, open) {
|
||||
if (open) navItems.forEach(function (other) { if (other !== item) setNavOpen(other, false); });
|
||||
item.dropdown.classList.toggle('active', open);
|
||||
item.link.setAttribute('aria-expanded', String(open));
|
||||
}
|
||||
function closeNavMenus() { navItems.forEach(function (item) { setNavOpen(item, false); }); }
|
||||
function setMobileOpen(open) {
|
||||
if (navMenu) navMenu.classList.toggle('active', open);
|
||||
if (navRight) navRight.classList.toggle('active', open);
|
||||
if (mobile) mobile.setAttribute('aria-expanded', String(open));
|
||||
if (!open) closeNavMenus();
|
||||
}
|
||||
document.querySelectorAll('.nav-menu > div > a').forEach(function (link) {
|
||||
var dropdown = link.parentElement.querySelector('.nav-cont');
|
||||
if (dropdown) link.addEventListener('click', function (event) {
|
||||
if (window.innerWidth <= 900) { event.preventDefault(); dropdown.classList.toggle('active'); }
|
||||
if (!dropdown) return;
|
||||
var item = { link: link, dropdown: dropdown, parent: link.parentElement };
|
||||
navItems.push(item);
|
||||
dropdown.id = 'static-nav-dropdown-' + navItems.length;
|
||||
link.setAttribute('aria-controls', dropdown.id);
|
||||
setNavOpen(item, false);
|
||||
link.addEventListener('click', function (event) {
|
||||
event.preventDefault();
|
||||
var toggle = mobileViewport.matches || event.detail === 0;
|
||||
setNavOpen(item, !toggle || link.getAttribute('aria-expanded') !== 'true');
|
||||
});
|
||||
link.addEventListener('keydown', function (event) {
|
||||
if (event.key === ' ' || event.key === 'ArrowDown') {
|
||||
event.preventDefault();
|
||||
setNavOpen(item, event.key === 'ArrowDown' || link.getAttribute('aria-expanded') !== 'true');
|
||||
var first = dropdown.querySelector('a[href]');
|
||||
if (event.key === 'ArrowDown' && first) first.focus();
|
||||
}
|
||||
});
|
||||
item.parent.addEventListener('mouseenter', function () { if (!mobileViewport.matches) setNavOpen(item, true); });
|
||||
item.parent.addEventListener('mouseleave', function () { if (!mobileViewport.matches && !item.parent.contains(document.activeElement)) setNavOpen(item, false); });
|
||||
item.parent.addEventListener('focusout', function (event) {
|
||||
var next = event.relatedTarget;
|
||||
if (!item.parent.contains(next) && (!mobileViewport.matches || !navMenu.contains(next))) setNavOpen(item, false);
|
||||
});
|
||||
});
|
||||
if (mobile) {
|
||||
mobile.setAttribute('role', 'button'); mobile.tabIndex = 0;
|
||||
mobile.setAttribute('aria-expanded', 'false');
|
||||
if (navMenu) { navMenu.id = 'static-nav-menu'; mobile.setAttribute('aria-controls', navMenu.id); }
|
||||
mobile.addEventListener('click', function () { setMobileOpen(!navMenu.classList.contains('active')); });
|
||||
mobile.addEventListener('keydown', function (event) {
|
||||
if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); mobile.click(); }
|
||||
});
|
||||
}
|
||||
document.addEventListener('click', function (event) { if (navMenu && !navMenu.contains(event.target) && !mobile?.contains(event.target)) closeNavMenus(); });
|
||||
document.addEventListener('keydown', function (event) {
|
||||
if (event.key !== 'Escape') return;
|
||||
var open = navItems.find(function (item) { return item.link.getAttribute('aria-expanded') === 'true'; });
|
||||
if (open) { closeNavMenus(); open.link.focus(); }
|
||||
else if (mobileViewport.matches && navMenu?.classList.contains('active')) { setMobileOpen(false); mobile?.focus(); }
|
||||
});
|
||||
mobileViewport.addEventListener('change', function () { setMobileOpen(false); });
|
||||
document.querySelectorAll('.language-selected').forEach(function (button) {
|
||||
button.setAttribute('role', 'button'); button.tabIndex = 0; button.setAttribute('aria-haspopup', 'true');
|
||||
function toggle(event) { event.stopPropagation(); button.closest('.language-selector').classList.toggle('active'); }
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
"site": "jskcloud",
|
||||
"origin": "https://www.jskcloud.net",
|
||||
"capturedAt": "2026-10-22T13:39:43.089Z",
|
||||
"generatedAt": "2026-10-22T14:09:42.228Z",
|
||||
"generatedAt": "2026-10-22T14:44:15.623Z",
|
||||
"defaultLanguage": "en",
|
||||
"languages": [
|
||||
"zh-cn",
|
||||
|
||||
@ -1,3 +1,13 @@
|
||||
html{scroll-behavior:smooth}img{max-width:100%}.static-main{max-width:1200px;margin:0 auto;padding:120px 24px 72px;min-height:55vh}.static-main h1{font-size:34px;line-height:1.35;margin:0 0 24px}.static-main h2{font-size:24px;line-height:1.45;margin:32px 0 16px}.static-main p{line-height:1.8}.static-article{max-width:960px;overflow-wrap:anywhere}.static-article img{height:auto;max-width:100%}.static-article p{margin:1em 0}.static-article ul,.static-article ol{padding-left:1.5em;list-style:revert}.static-article table{max-width:100%;display:block;overflow-x:auto}.static-article pre{white-space:pre-wrap}.static-date{color:#7c8494;font-size:14px;margin-bottom:28px}.static-list{margin:0;padding:0;list-style:none}.static-list>li{display:flex;align-items:baseline;justify-content:space-between;gap:24px;padding:18px 0;border-bottom:1px solid #e6e9ef}.static-list a{color:inherit;line-height:1.6}.static-list a:hover{color:#2978e7}.static-list time{white-space:nowrap;color:#7c8494;font-size:14px}.static-back{display:inline-block;margin-top:36px;color:#2978e7}.static-table-wrap{overflow-x:auto;margin:24px 0}.static-table{border-collapse:collapse;width:100%;text-align:left;min-width:560px}.static-table th,.static-table td{padding:16px 18px;border:1px solid #e2e7ef;line-height:1.65}.static-table th{background:#f6f8fc}.static-table caption{text-align:left;font-size:22px;font-weight:600;padding:16px 0}.static-table td:first-child{min-width:130px}.static-search{display:flex;gap:12px;margin:24px 0}.static-search input{flex:1;min-width:0;padding:12px 14px;border:1px solid #cbd2dc;border-radius:4px;font:inherit}.static-search button{background:#2875dd;border:0;border-radius:4px;padding:12px 24px;color:white;font:inherit;cursor:pointer}.static-pagination{display:flex;flex-wrap:wrap;gap:8px;margin:28px 0}.static-pagination a,.static-pagination span{padding:8px 13px;border:1px solid #dce2ec;border-radius:3px}.static-pagination [aria-current]{background:#2875dd;color:white}.static-lightbox{border:0;background:transparent;padding:40px;max-width:98vw;max-height:98vh;overflow:auto}.static-lightbox::backdrop{background:#000c}.static-lightbox img{max-width:90vw;max-height:86vh;object-fit:contain}.static-lightbox button{position:fixed;top:16px;right:24px;background:#fff;color:#222;border:0;border-radius:50%;width:40px;height:40px;font-size:28px;cursor:pointer}.language-option a,a.language-option{color:inherit;text-decoration:none}.language-dropdown a.language-option{display:flex}.static-empty{padding:24px;color:#7c8494}[data-filter-row][hidden]{display:none!important}.nav-cont a,.uk-navbar-dropdown a{overflow-wrap:anywhere}.config-container{max-width:100%;overflow-x:auto}body{overflow-x:hidden}
|
||||
@media(max-width:900px){.static-main{padding-top:96px;padding-inline:18px}.static-main h1{font-size:27px}.static-main h2{font-size:21px}.static-list>li{gap:12px;flex-wrap:wrap}.static-table th,.static-table td{padding:12px}.static-lightbox{padding:8px}.nav-menu.active .nav-cont.active{display:block!important;height:auto!important;visibility:visible!important;opacity:1!important}.nav-menu.active>.nav-cont,.nav-menu.active>div{max-width:100%}.static-search button{padding-inline:16px}.static-date{font-size:13px}.config-table{min-width:700px}.advantage-list,.practice-content,.brand-group{max-width:100%}}
|
||||
body[data-static-site="jskcloud"]{font-family:"Microsoft YaHei",Arial,"Noto Sans SC","Noto Sans KR",sans-serif}body[data-static-site="scck"]{--font-family:Montserrat,"Microsoft YaHei","Noto Sans SC","Noto Sans KR",Arial,sans-serif;font-family:var(--font-family)}button,input,select,textarea{font-family:inherit}
|
||||
body[data-static-site="jskcloud"] .nav-menu>div{position:relative}
|
||||
body[data-static-site="jskcloud"] .nav-header{position:relative}
|
||||
body[data-static-site="jskcloud"] .nav-menu .nav-cont{display:none;top:100%;left:0;width:240px;max-width:calc(100vw - 32px);background:#fff;box-shadow:0 5px 12px #0002;z-index:1000}
|
||||
body[data-static-site="jskcloud"] .nav-menu .nav-cont.active,body[data-static-site="jskcloud"] .nav-menu .nav-cont.active .nav-cont-menu{display:block}
|
||||
body[data-static-site="jskcloud"] .nav-menu .nav-cont-menu{animation:none}
|
||||
body[data-static-site="jskcloud"] .nav-cont>.section-content{width:100%;max-width:none}
|
||||
body[data-static-site="jskcloud"] .nav-content a{display:block;width:100%}
|
||||
body[data-static-site="jskcloud"] .nav-item-box{min-width:0;height:auto;min-height:48px;padding:14px 16px}
|
||||
body[data-static-site="jskcloud"] .nav-item-box .item-box-title{margin-left:0}
|
||||
@media(max-width:768px){body[data-static-site="jskcloud"] .nav-menu{top:100%;max-height:calc(100dvh - 110px);overflow-y:auto}body[data-static-site="jskcloud"] .nav-menu .nav-cont{position:static;width:100%;max-width:none;box-shadow:none}body[data-static-site="jskcloud"] .nav-item-box{padding:12px 32px;background:#f9f9f9}}
|
||||
|
||||
@ -1,18 +1,67 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
var mobile = document.getElementById('mobileMenuBtn');
|
||||
if (mobile) mobile.addEventListener('click', function () {
|
||||
var menu = document.querySelector('.nav-menu');
|
||||
var right = document.querySelector('.nav-right');
|
||||
if (menu) { menu.classList.toggle('active'); mobile.setAttribute('aria-expanded', String(menu.classList.contains('active'))); }
|
||||
if (right) right.classList.toggle('active');
|
||||
});
|
||||
var navMenu = document.querySelector('.nav-menu');
|
||||
var navRight = document.querySelector('.nav-right');
|
||||
var mobileViewport = window.matchMedia('(max-width: 768px)');
|
||||
var navItems = [];
|
||||
function setNavOpen(item, open) {
|
||||
if (open) navItems.forEach(function (other) { if (other !== item) setNavOpen(other, false); });
|
||||
item.dropdown.classList.toggle('active', open);
|
||||
item.link.setAttribute('aria-expanded', String(open));
|
||||
}
|
||||
function closeNavMenus() { navItems.forEach(function (item) { setNavOpen(item, false); }); }
|
||||
function setMobileOpen(open) {
|
||||
if (navMenu) navMenu.classList.toggle('active', open);
|
||||
if (navRight) navRight.classList.toggle('active', open);
|
||||
if (mobile) mobile.setAttribute('aria-expanded', String(open));
|
||||
if (!open) closeNavMenus();
|
||||
}
|
||||
document.querySelectorAll('.nav-menu > div > a').forEach(function (link) {
|
||||
var dropdown = link.parentElement.querySelector('.nav-cont');
|
||||
if (dropdown) link.addEventListener('click', function (event) {
|
||||
if (window.innerWidth <= 900) { event.preventDefault(); dropdown.classList.toggle('active'); }
|
||||
if (!dropdown) return;
|
||||
var item = { link: link, dropdown: dropdown, parent: link.parentElement };
|
||||
navItems.push(item);
|
||||
dropdown.id = 'static-nav-dropdown-' + navItems.length;
|
||||
link.setAttribute('aria-controls', dropdown.id);
|
||||
setNavOpen(item, false);
|
||||
link.addEventListener('click', function (event) {
|
||||
event.preventDefault();
|
||||
var toggle = mobileViewport.matches || event.detail === 0;
|
||||
setNavOpen(item, !toggle || link.getAttribute('aria-expanded') !== 'true');
|
||||
});
|
||||
link.addEventListener('keydown', function (event) {
|
||||
if (event.key === ' ' || event.key === 'ArrowDown') {
|
||||
event.preventDefault();
|
||||
setNavOpen(item, event.key === 'ArrowDown' || link.getAttribute('aria-expanded') !== 'true');
|
||||
var first = dropdown.querySelector('a[href]');
|
||||
if (event.key === 'ArrowDown' && first) first.focus();
|
||||
}
|
||||
});
|
||||
item.parent.addEventListener('mouseenter', function () { if (!mobileViewport.matches) setNavOpen(item, true); });
|
||||
item.parent.addEventListener('mouseleave', function () { if (!mobileViewport.matches && !item.parent.contains(document.activeElement)) setNavOpen(item, false); });
|
||||
item.parent.addEventListener('focusout', function (event) {
|
||||
var next = event.relatedTarget;
|
||||
if (!item.parent.contains(next) && (!mobileViewport.matches || !navMenu.contains(next))) setNavOpen(item, false);
|
||||
});
|
||||
});
|
||||
if (mobile) {
|
||||
mobile.setAttribute('role', 'button'); mobile.tabIndex = 0;
|
||||
mobile.setAttribute('aria-expanded', 'false');
|
||||
if (navMenu) { navMenu.id = 'static-nav-menu'; mobile.setAttribute('aria-controls', navMenu.id); }
|
||||
mobile.addEventListener('click', function () { setMobileOpen(!navMenu.classList.contains('active')); });
|
||||
mobile.addEventListener('keydown', function (event) {
|
||||
if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); mobile.click(); }
|
||||
});
|
||||
}
|
||||
document.addEventListener('click', function (event) { if (navMenu && !navMenu.contains(event.target) && !mobile?.contains(event.target)) closeNavMenus(); });
|
||||
document.addEventListener('keydown', function (event) {
|
||||
if (event.key !== 'Escape') return;
|
||||
var open = navItems.find(function (item) { return item.link.getAttribute('aria-expanded') === 'true'; });
|
||||
if (open) { closeNavMenus(); open.link.focus(); }
|
||||
else if (mobileViewport.matches && navMenu?.classList.contains('active')) { setMobileOpen(false); mobile?.focus(); }
|
||||
});
|
||||
mobileViewport.addEventListener('change', function () { setMobileOpen(false); });
|
||||
document.querySelectorAll('.language-selected').forEach(function (button) {
|
||||
button.setAttribute('role', 'button'); button.tabIndex = 0; button.setAttribute('aria-haspopup', 'true');
|
||||
function toggle(event) { event.stopPropagation(); button.closest('.language-selector').classList.toggle('active'); }
|
||||
|
||||
@ -9,7 +9,7 @@ import { sites } from './sites.mjs';
|
||||
import { createStaticServer } from './preview.mjs';
|
||||
import { textNodes } from './translate.mjs';
|
||||
|
||||
const errors=[];const checks={files:0,links:0,resources:0,browserPages:0,status404:0};
|
||||
const errors=[];const checks={files:0,links:0,resources:0,browserPages:0,status404:0,navigation:0};
|
||||
const selected=sites.filter(s=>!process.argv.slice(2).some(a=>!a.startsWith('--'))||process.argv.includes(s.id));
|
||||
async function exists(file){try{return(await fs.stat(file)).isFile();}catch{return false;}}
|
||||
function cssUrls(text){const urls=[];valueParser(text).walk(node=>{if(node.type==='function'&&node.value==='url')urls.push(valueParser.stringify(node.nodes).replace(/^['"]|['"]$/g,''));});return urls;}
|
||||
@ -22,6 +22,75 @@ async function linkCheck(site,from,value,kind){
|
||||
const file=path.join(root,target);if(!await exists(file)&&!await exists(path.join(file,'index.html')))errors.push({site:site.id,file:from,kind,message:'Missing target',value});
|
||||
checks[kind==='link'?'links':'resources']++;
|
||||
}
|
||||
async function checkJskNavigation(page,item){
|
||||
const original=page.url();
|
||||
const groups=page.locator('.nav-menu > div');
|
||||
const products=groups.nth(0);const about=groups.nth(1);
|
||||
const productTrigger=products.locator(':scope > a');const aboutTrigger=about.locator(':scope > a');
|
||||
const links=products.locator('.nav-cont a');
|
||||
const check=(ok,message)=>{checks.navigation++;if(!ok)errors.push({site:'jskcloud',file:item.file,message});};
|
||||
async function visible(locator,message){
|
||||
try{await locator.waitFor({state:'visible',timeout:2500});check(true,message);return true;}
|
||||
catch{check(false,message);return false;}
|
||||
}
|
||||
await fs.mkdir(path.join(root,'test-results','jskcloud'),{recursive:true});
|
||||
for(const width of [1440,800]){
|
||||
await page.setViewportSize({width,height:1000});
|
||||
await productTrigger.hover();
|
||||
await visible(links.first(),`Product dropdown did not open on desktop hover (${width}px)`);
|
||||
check(await links.count()===4,'Product dropdown must contain four product links');
|
||||
for(const [index,target] of ['cloud.html','dedicated.html','balance.html','box.html'].entries()){
|
||||
const link=links.nth(index);
|
||||
check(await link.isVisible(),`Product link is hidden: ${target} (${width}px)`);
|
||||
check(await link.evaluate(a=>a.href)===new URL(`/jskcloud/${item.language}/${target}`,original).href,`Incorrect product link: ${target}`);
|
||||
}
|
||||
if(width===1440)await page.screenshot({path:path.join(root,'test-results','jskcloud',item.file.replaceAll('/','-')+'.navigation.desktop.png')});
|
||||
await aboutTrigger.hover();
|
||||
await visible(about.locator('.nav-cont a').first(),`About dropdown did not open (${width}px)`);
|
||||
check(!await links.first().isVisible(),'Opening About must close Products');
|
||||
await page.mouse.move(width-2,300);
|
||||
check(!await about.locator('.nav-cont a').first().isVisible(),'Desktop dropdown did not close on pointer exit');
|
||||
await productTrigger.click();
|
||||
await visible(links.first(),`Product dropdown did not remain open after clicking its trigger (${width}px)`);
|
||||
check(page.url()===original,'Product trigger must not navigate to the homepage');
|
||||
await page.mouse.click(width-2,10);
|
||||
check(!await links.first().isVisible(),'Outside click did not close the dropdown');
|
||||
}
|
||||
await productTrigger.focus();await productTrigger.press('ArrowDown');
|
||||
await visible(links.first(),'ArrowDown did not open Products');
|
||||
check(await links.first().evaluate(a=>a===document.activeElement),'ArrowDown did not focus the first product');
|
||||
await page.keyboard.press('Escape');
|
||||
check(!await links.first().isVisible(),'Escape did not close Products');
|
||||
check(await productTrigger.evaluate(a=>a===document.activeElement),'Escape did not return focus to the trigger');
|
||||
await productTrigger.press('Enter');await visible(links.first(),'Enter did not open Products');
|
||||
await productTrigger.press('Space');check(!await links.first().isVisible(),'Space did not close Products');
|
||||
for(const width of [390,768]){
|
||||
await page.setViewportSize({width,height:844});
|
||||
await page.evaluate(()=>window.scrollTo({top:0,left:0,behavior:'instant'}));
|
||||
const mobile=page.locator('#mobileMenuBtn');const menu=page.locator('.nav-menu');
|
||||
await mobile.click();check(await menu.isVisible(),`Mobile navigation did not open (${width}px)`);
|
||||
check(!await links.first().isVisible(),'Mobile product dropdown must start collapsed');
|
||||
await productTrigger.click();await visible(links.first(),`Mobile product dropdown did not expand (${width}px)`);
|
||||
check(await productTrigger.getAttribute('aria-expanded')==='true','Expanded Products must expose its state');
|
||||
const bounds=await links.last().boundingBox();
|
||||
check(!!bounds&&bounds.y>=0&&bounds.y+bounds.height<=844,`Mobile product links must fit below the header (${width}px)`);
|
||||
check(await page.evaluate(()=>window.scrollY)<=2,`Opening mobile Products scrolled the page (${width}px)`);
|
||||
if(width===390)await page.screenshot({path:path.join(root,'test-results','jskcloud',item.file.replaceAll('/','-')+'.navigation.mobile.png')});
|
||||
await productTrigger.click();check(!await links.first().isVisible(),'Second mobile click did not collapse Products');
|
||||
await productTrigger.click();await aboutTrigger.click();
|
||||
await visible(about.locator('.nav-cont a').first(),'Mobile About dropdown did not expand');
|
||||
check(!await links.first().isVisible(),'Mobile dropdowns must close their siblings');
|
||||
await mobile.click();check(!await menu.isVisible(),'Mobile navigation did not close');
|
||||
}
|
||||
await page.setViewportSize({width:1440,height:1000});
|
||||
await productTrigger.hover();
|
||||
if(await visible(links.first(),'Products did not reopen after switching to desktop')){
|
||||
const target=await links.first().evaluate(a=>a.href);
|
||||
await Promise.all([page.waitForURL(target),links.first().click()]);
|
||||
check(page.url()===target,'Product link did not navigate to its static page');
|
||||
await page.goto(original,{waitUntil:'networkidle'});await page.evaluate(()=>document.fonts.ready);
|
||||
}
|
||||
}
|
||||
for(const site of selected){
|
||||
const manifest=await jsonFile(path.join(root,site.id,'site-manifest.json'));
|
||||
for(const item of manifest.pages){
|
||||
@ -58,10 +127,13 @@ if(!process.argv.includes('--static-only')){
|
||||
browser=await launchBrowser();const context=await browser.newContext({viewport:{width:1440,height:1000},serviceWorkers:'block'});
|
||||
await context.route('**/*',async route=>{if(!route.request().url().startsWith(base)){errors.push({message:'External browser request',url:route.request().url()});return route.abort();}return route.continue();});
|
||||
for(const site of selected){
|
||||
const manifest=await jsonFile(path.join(root,site.id,'site-manifest.json'));const representative=manifest.pages.filter(p=>/^(?:(?:en|zh-cn|zh-hk)\/)?(?:index|dedicated|balance|box|cloud|about|contact|document|document-result|news|announce)\.html$/.test(p.file)||p.file.endsWith('/'+(site.id==='jskcloud'?'24':'1')+'.html'));
|
||||
await pool(representative,3,async item=>{
|
||||
const page=await context.newPage();page.on('pageerror',e=>errors.push({site:site.id,file:item.file,message:e.message}));page.on('response',r=>{if(r.status()>=400)errors.push({site:site.id,file:item.file,message:`Browser HTTP ${r.status()}`,url:r.url()});});
|
||||
const manifest=await jsonFile(path.join(root,site.id,'site-manifest.json'));const navigationOnly=process.argv.includes('--navigation-only');const representative=manifest.pages.filter(p=>/^(?:(?:en|zh-cn|zh-hk)\/)?(?:index|dedicated|balance|box|cloud|about|contact|document|document-result|news|announce)\.html$/.test(p.file)||p.file.endsWith('/'+(site.id==='jskcloud'?'24':'1')+'.html')).filter(p=>!navigationOnly||/(?:^|\/)index\.html$/.test(p.file));
|
||||
await pool(representative,navigationOnly?1:3,async item=>{
|
||||
let page;
|
||||
try{
|
||||
page=await context.newPage();page.on('pageerror',e=>errors.push({site:site.id,file:item.file,message:e.message}));page.on('response',r=>{if(r.status()>=400)errors.push({site:site.id,file:item.file,message:`Browser HTTP ${r.status()}`,url:r.url()});});
|
||||
await page.goto(`${base}/${site.id}/${item.file}`,{waitUntil:'networkidle'});await page.evaluate(()=>document.fonts.ready);checks.browserPages++;
|
||||
if(site.id==='jskcloud'&&/(?:^|\/)index\.html$/.test(item.file))await checkJskNavigation(page,item);
|
||||
if(item.file==='index.html'||item.file==='dedicated.html'||item.file==='cloud.html'){
|
||||
await fs.mkdir(path.join(root,'test-results',site.id),{recursive:true});await page.screenshot({path:path.join(root,'test-results',site.id,item.file+'.desktop.png'),fullPage:true});
|
||||
await page.screenshot({path:path.join(root,'test-results',site.id,item.file+'.desktop.viewport.png')});
|
||||
@ -75,14 +147,15 @@ if(!process.argv.includes('--static-only')){
|
||||
}
|
||||
}
|
||||
if(item.file.endsWith('document-result.html')){const input=page.locator('#static-search-query');await input.fill('zzzz_no_matching_document_903');if(await page.locator('#static-search-results a').count()!==0)errors.push({site:site.id,file:item.file,message:'Search did not filter'});await input.fill('');if(await page.locator('#static-search-results a').count()===0)errors.push({site:site.id,file:item.file,message:'Local search index empty'});}
|
||||
await page.close();
|
||||
}catch(error){errors.push({site:site.id,file:item.file,message:error.message});}
|
||||
finally{await page?.close().catch(()=>{});}
|
||||
});
|
||||
console.log(`${site.id}: checked ${representative.length} desktop/mobile browser pages`);
|
||||
for(const bad of ['console/','console/v1/common','clientarea/','cart/goods.htm?id=4','login.htm','regist.htm','finance.htm','plugin/27/ticket.htm','en/login.htm','this-page-does-not-exist.html']){
|
||||
const r=await fetch(`${base}/${site.id}/${bad}`);checks.status404++;if(r.status!==404)errors.push({site:site.id,file:bad,message:`Expected 404, got ${r.status}`});
|
||||
}
|
||||
}
|
||||
await context.close();
|
||||
await context.close().catch(()=>{});
|
||||
}finally{await browser?.close();await new Promise(resolve=>server.close(resolve));}
|
||||
}
|
||||
await writeJSON(path.join(root,'test-results','verification.json'),{checkedAt:new Date().toISOString(),checks,errors});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user