Commit 91d88327 authored by wang's avatar wang

乱图 渲染

parent fb85fc50
No preview for this file type
No preview for this file type
import { createRequire } from "https://deno.land/std@0.173.0/node/module.ts";
// Loads native module polyfill.
import { JSDOM } from "npm:jsdom"
const dom = new JSDOM(`
<!DOCTYPE html><html lang="en"><head>
<meta charset="utf-8">
<base href="/">
<title>JetBlue</title><link rel="preload" href="/avenir-next-demi.491bd2d50f3c5235.woff2" type="font/woff2" as="font" crossorigin="anonymous"><link rel="preload" href="/avenir-next-regular.13d777ec9ed091ad.woff2" type="font/woff2" as="font" crossorigin="anonymous"><link rel="preload" href="/din-bold.eecd33507563aa88.woff2" type="font/woff2" as="font" crossorigin="anonymous"><link rel="preload" href="/din.a9c169a83761deac.woff2" type="font/woff2" as="font" crossorigin="anonymous">
<link rel="preload" href="/styles.3d5ee7d1d2582bd7.css" type="text/css" as="style">
<link href="/styles.3d5ee7d1d2582bd7.css" type="text/css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no, viewport-fit=cover">
<meta name="description" content="JetBlue offers flights to 90+ destinations with free inflight entertainment, free brand-name snacks and drinks, lots of legroom and award-winning service.">
<meta name="keywords" lang="en" content="JetBlue airline, flights, vacations, low airfare, cheap fare, jetblue.com">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="#00205b">
<meta name="theme-color" content="#f6f6f6">
<script type="text/javascript" id="shape" src="/js/src/jb-74873.js"></script>
<link rel="canonical" href="https://www.jetblue.com/">
<link rel="preconnect" href="https://jbrest.jetblue.com">
<link href="/ui-assets/favicon/iphone5_splash.png" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image">
<link href="/ui-assets/favicon/iphone6_splash.png" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image">
<link href="/ui-assets/favicon/iphoneplus_splash.png" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3)" rel="apple-touch-startup-image">
<link href="/ui-assets/favicon/iphonex_splash.png" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3)" rel="apple-touch-startup-image">
<link href="/ui-assets/favicon/iphonexr_splash.png" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image">
<link href="/ui-assets/favicon/iphonexsmax_splash.png" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3)" rel="apple-touch-startup-image">
<link href="/ui-assets/favicon/ipad_splash.png" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image">
<link href="/ui-assets/favicon/ipadpro1_splash.png" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image">
<link href="/ui-assets/favicon/ipadpro3_splash.png" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image">
<link href="/ui-assets/favicon/ipadpro2_splash.png" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image">
<link rel="apple-touch-icon" sizes="180x180" href="/ui-assets/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/ui-assets/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/ui-assets/favicon/favicon-16x16.png">
<link rel="mask-icon" href="/ui-assets/favicon/safari-pinned-tab.svg" color="#00205b">
<link rel="manifest" href="manifest.json" crossorigin="use-credentials">
<meta name="apple-mobile-web-app-title" content="JetBlue">
<meta name="application-name" content="JetBlue">
<meta name="msapplication-TileColor" content="#00205b">
<meta name="theme-color" content="#f6f6f6">
<script type="text/javascript" id="config">
window.__DOTCOM_ENV_CONFIG = {"analytics":{"orgId":"A553776A5245AE600A490D44@AdobeOrg","rsId":"jetbluecom2","rsIdNative":"jetblueiphone","trackingServer":"omnistats.jetblue.com","trackingServerSecure":"somnistats.jetblue.com"},"api":{"bffServiceUrl":"https://jbrest.jetblue.com/bff/bff-service","bffServiceUrlObj":{"latest":"https://azrest.jetblue.com/bff/bffservice","legacy":"https://jbrest.jetblue.com/bff/bff-service"},"bffApiKey":"94ee94248cd740849432430696cedf55","resetPasswordApiKey":"49fc015f1ba44abf892d2b8961612378","abTestConfigUrl":"/abtest","routeMapDestinationsUrl":"/magnoliapublic/.rest/jetblue/v4/route-map/customDelivery/route","oktaJbWrapperServiceUrl":"https://azrest.jetblue.com","iamServiceUrl":"https://jbrest.jetblue.com/iam","iamServiceKey":"dummy-dummy-dymmy-dummy","receiptRequestUrl":"https://az-api.jetblue.com/receiptRequest","myTripsServiceUrl":"https://azrest.jetblue.com/jb","myTripsServiceApiKey":"e6aefb47a2344cc68b9064ef2466fde2","myTripsServiceKey":"dummy-dummy-dymmy-dummy","odServiceUrl":"https://jbrest.jetblue.com/od/od-service","odServiceKey":"dummy-dummy-dymmy-dummy","infoServiceUrl":"https://jbrest.jetblue.com/info","infoServiceKey":"dummy-dummy-dymmy-dummy","googleMapKey":"AIzaSyBLUrD_RQBgVTfBiLoIa0wbe9-G7KBLtZs","googleMapId":"a80ee4a848cea8e9","language":"en","lfsServiceUrl":"https://jbrest.jetblue.com/lfs","lfsServiceKey":"dummy-dummy-dymmy-dummy","flightStatusServiceUrl":"https://az-api.jetblue.com/flight-status","flightStatusApiKey":"49fc015f1ba44abf892d2b8961612378","flightStatusServiceKey":"dummy-dummy-dymmy-dummy","rwbCartUrl":"https://www.jetblue.com/booking/cart","rwbCheckoutUrl":"https://www.jetblue.com/booking/checkout","baseDomain":"https://www.jetblue.com","magnoliaUrl":"/magnoliapublic","mobileBaseUrl":"https://mobile.jetblue.com","dealsServiceUrl":"https://jbrest.jetblue.com/seo-deals/deals","flightListServiceUrl":"https://jbrest.jetblue.com/seo-deals/deals","baseTrueBlue":"https://trueblue.jetblue.com","routeMapCityIdUrl":"/magnoliapublic/.rest/jetblue/v4/fares/customDelivery/city-id","baseVacations":"https://www.jetbluevacations.com","rendertronUrl":"https://rendertron.jetblue.com/render/","travelBankUrl":"https://travelbank.prod.sabre.com","preferenceCenterServiceUrl":"https://az-api.jetblue.com","profileServiceCreditCardUrl":"https://azrest.jetblue.com","baseBook":"https://book.jetblue.com","loginOrchestratorUrl":"https://jbrest.jetblue.com/iam/login","loginOrchestratorApiKey":"e6aefb47a2344cc68b9064ef2466fde2","sessionCookieRedirectUrl":"https://accounts.jetblue.com/login/sessionCookieRedirect","azApiUrl":"https://azrest.jetblue.com","contactUsUrl":"https://az-api.jetblue.com/contactus/dotcom-email-service/sendmail","groupTravelUrl":"https://az-api.jetblue.com/contactus/dotcom-email-service/sendmail","leanProfileUrl":"https://azrest.jetblue.com/profile/v1/leanProfile","leanProfileApiKey":"e6aefb47a2344cc68b9064ef2466fde2","opaqueProfileLookupUrl":"https://azrest.jetblue.com/profile/v1/searchOpaqueProfile","opaqueProfileLookupApiKey":"e6aefb47a2344cc68b9064ef2466fde2","rwbBookerUrl":"https://www.jetblue.com/booking/flights","loggedInShoppingCartUrl":"https://jbrest.jetblue.com/cart-rwb/getShoppingCartForLoggedIn","shoppingCartUrl":"https://jbrest.jetblue.com/cart-rwb/getCarts","rwbProfileUrl":"https://jbrest.jetblue.com/iam-rwb/v1/book/profile","guestShoppingCartUrl":"https://jbrest.jetblue.com/cart-rwb/getFromShoppingCart","configUrl":"/magnoliapublic/.rest/jetblue/v4/jetbluedotcom/customDelivery/config","googleSearchUrl":"https://www.jetblue.com/api/site-search","vacationsServiceUrl":"https://www.jetbluevacations.com"},"buildId":"23.2.2-rc-0","environment":"prddotcom1","sentry":{"url":"https://08b1aeee56aa4725bc842fc4e774cb7a@sentry.io/225409","dsn":"https://e77fa73853ea4f1b852338fa14b401bb@o83455.ingest.sentry.io/5952685","tracingOrigins":"https://www-dev2.jetblue.com/, https://www-int2.jetblue.com/, https://www-stg2.jetblue.com/, https://www-qa2.jetblue.com/, https://jetblue.com"},"appDynamics":{"appdKey":"AD-AAB-AAK-YAF","isAppDynamicsEnabled":"True","monitoring":{"controllerHostName":"jetblue.saas.appdynamics.com","controllerPort":"443","controllerSslEnabled":"True","accountName":"jetblue","accountAccessKey":"c444c2db-7b81-4261-95bb-e994400ddaef","applicationName":"dotcom-prd","tierName":"dotcom-ui","nodeName":"dotcom-ui","reuseNode":"True","reuseNodePrefix":"dotcom-ui","maxProcessSnapshotsPerPeriod":"0","debug":"False"}},"cookiePolicy":"GP","widgets":{"gladlyConfig":{"appId":"dc4bd94a-7a22-11e8-90f7-c3539b6f5bd9","gladlyHelp":"https://cdn.gladly.com/chat-sdk/widget.js","src":"https://cdn.gladly.com/chat-sdk/widget.js"},"asappConfig":{"hostname":"jetblue.asapp.com","appId":"jetblue"},"captchaConfig":{"blacklistedCountries":"BD,CN,EG,ID,PK,PH,RU,TW,TH,TR,UA,VN","resolvedDuration":"120000","siteKey":"6LeWO7oUAAAAACnCVFiHm4gYZi3KShnESd4KnDGE"},"cookieConsent":{"src":"https://consent.trustarc.com/notice?domain=jetblue.com&c=teconsent&js=nj&noticeType=bb&gtm=1"},"jtpSdk":{"src":"https://sdk.jetbluevacations.com/jtpsdk/api/v1?client=jetbluecom"},"sherpaConfig":{"appId":"spY3MjM0OT","affiliateId":"jetblue"}},"contactUs":{"oauth":{"resource":"19ed6698-37b2-47c0-bf78-3f0086775ddd","clientId":"5743da29-b579-4bf6-894b-af829e8ddbeb","clientSecret":"@ZTVu2?gsxsF77hyzvK4e:yqueARqTc."}},"shoppingCartConfig":{"apiVersion":"v3","applicationType":"DOTCOM"},"flags":{"clm5":"true","loadCaptchaWidget":"true","loadAppdynamics":"true","oktaFlow":"true","preferenceCenterFlow":"true","rwbFlowEnabled":"true","displayCartInfo":"false","useAug2020CMSHeader":"true","isCMSFallbackEnabled":"true","useOIE":"false","lazyLoadImages":"true","dynamicMetaThemeColor":"false","mybEnableHealthCheckService":"false","useHeaderMobileV2":"true","enableUIDebuging":"false","newTBSignedIn":"true","mybEmailUpdateURL":"/manage-trips/add-trip-email","cookieConsent":"true","newTBSignedOut":"true","logPartialPageResponse":"true","mybReplaceLastNameAccents":"true","mybEnablePNRService":"true","ASAPPChatInstead":"both","allowBffCaching":"true","disableFRWhenRoutingToNGB":"true","apiUrlsForFrenchTranslation":"magnoliaUrl, myTripsServiceUrl, uiAssets","enableSentry":"true","loadASAPPWidget":"true","browserWarningOptions":"{\\"warningScriptUrl\\":\\"/browser-warning/browser-warning.js\\",\\"showOnce\\":\\"true\\",\\"showOnceCookieName\\":\\"FIRST_VISIT_WITH_UNSUPPORTED_BROWSER\\",\\"showOnceCookieDays\\":\\"1\\",\\"browserBlackList\\":{\\"ie\\":\\"11\\",\\"edge\\":\\"79\\",\\"android\\":\\"8\\",\\"chrome\\":\\"72\\",\\"firefox\\":\\"73\\",\\"opera\\":\\"11\\",\\"ios\\":\\"13\\",\\"safari\\":\\"11\\"}}","mybGoToDX":"false"},"sharedWebCredentials":{"appIDs":"WFTGUDV3AL.com.jetblue.jetBlueiPhone,WFTGUDV3AL.com.jetblue.jetBlueiPhoneQA","componentPath":"/test_universal_links/*","componentComment":"Matches any URL whose path starts with /test_universal_links","webCredentialsApps":["WFTGUDV3AL.com.jetblue.jetBlueiPhone","WFTGUDV3AL.com.jetblue.jetBlueiPhoneQA"]},"fsConfig":{"prd":"4HV1Q","nonPrd":"JMN70"},"mybConfig":{"pnrServiceUrl":"https://azrest.jetblue.com/myb/pnr/b6-record-locator","sabreDXUrl":"https://managetrips.jetblue.com/dx/B6DX/#/myb","healthCheckServiceUrl":"https://azrest.jetblue.com/myb/pnr-health-check","sabreDXTripsUrl":"https://managetrips.jetblue.com/dx/B6DX/#/home?tabIndex=1","pnrEmailLocatorUrl":"https://azrest.jetblue.com/myb/qualifier/b6-record-locator-email","pnrServiceAppId":"DOTCOM","pnrServiceApiKey":"45804e33f26b44d1b144090af2788abf","ssoUrl":"https://azrest.jetblue.com/sso/session","ssoAPIKey":"7c3ddf1637d248f49eb191dc275cb2c8","sabreOpenTokenCookieName":"b6dcsso","sabreReturnUrlCookieName":"b6dcreturnurl","sabreOpenTokenCookieTimeout":"2700"},"okta":{"auth":{"client_id":"0oa6pzarfiDxq8sn32p7","idp":"0oa6qe03vy6TWGN9o2p7","frenchIdp":"0oaluqtd53SL0rQPS2p7","issuer":"https://accounts.jetblue.com/oauth2/aus63a5bs52M8z9aE2p7","expire_early_time":"240"},"oktaAuthCookie":"B6auth","oktaLogout":{"contentType":"application/x-www-form-urlencoded","oktaSessionUrl":"https://azrest.jetblue.com/logout/api/v1/users/","oauthTokens":"true","apikey":"e6aefb47a2344cc68b9064ef2466fde2","deleteCookies":"B6auth,SSWEB2TGC,jbAuthentication,jbFSIdentify,b6dcsso","deleteLocalStorage":"","domains":"https://book.jetblue.com/B6/ProfileThirdPartyLogoutAction.do,https://login.jetbluevacations.com/sw-signout,https://trueblue.jetblue.com/logout,https://www.jetblue.com/booking/logout","jbSessions":{"session2":{"cookie":"DUMMY","url":"DUMMY"}},"whitelistedDomains":"jetblue.com,localhost","oktaLogoutDelayTime":"2000"},"oauthTokenApiKey":"0256da388b134af9b47abb7bb4112e22","clientId":"5743da29-b579-4bf6-894b-af829e8ddbeb","clientSecret":"xj-9z3u~2vEY7~khJAA-q7.K-rXmbfo3M8","resource":{"emailReset":"bb627fa4-03c3-41d6-90a0-808b7e00654e","forgotPasswordReset":"c037ec4c-39b1-4033-9ad0-07e4aee258af"}},"preferenceCenter":{"membersApiKey":"65e8826fb65c46d696d497d582d083c8","creditCardApiKey":"b82c387fdc82453baf07abcf199b0830","futureBookingHref":"https://book.jetblue.com/B6/ReservationSearch.do"},"bookerCalendars":{"autoLoad":"true","roundTripDefaultTripLength":"7","autoLoadRootMargin":"100px","roundTripServiceSuccessPointsReturn":"Showing per person, lowest recent fares plus taxes & fees from $5.60 for trips departing [DEPART-DATE].","autoLoadDelay":"500","roundTripPricedRoutes":"ACC, ADD, AMM, AMS, ATH, BCN, BDA, BER, BGO, BKK, BOG, BRU, BUE, CLO, CMB, CPH, CPT, DAR, DEL, DOH, DPS, DUB, DUR, DUS, EBB, FRA, GEO, GLA, HAM, HEL, HKT, HRE, ISB, JKT, JNB, JRO, KGL, KHI, KRT, KUL, KWI, LHE, LON, LUN, LXR, LYS, MAD, MAN, MBJ, MCT, MEX, MIL, MLE, MTY, MUC, MUX, NAP, NBO, OSL, PAR, PEW, REK, RIO, ROM, SAO, SCL, SEZ, SIN, SKB, SKT, SLL, STO, TLV, WDH, ZNZ, ZRH","roundTripServiceSuccessPointsDepart":"Showing per person, lowest recent fares plus taxes & fees for [TRIP-LENGTH] day trips.","autoLoadPercentInView":"0.7","showCalendarRoundtripPrices":"false","roundTripServiceSuccessCashDepart":"Showing per person, lowest recent fares for [TRIP-LENGTH] day trips.","roundTripServiceSuccessCashReturn":"Showing per person, lowest recent fares for trips departing [DEPART-DATE]."},"ASAPP":{"ASAPPWhitelistedPhoneNumbers":"18005382583, 18001234567","whiteListedURLs":"/contact-us,/contact-us/chat","authenticationEnabled":"false"},"cookieLists":{"RWBCookie":["NGB-test"]},"linkDefaults":{"internal":"Internal Link should open in a new window.","external":"External Link should open in a new window operated by external parties and may not conform to the same accessibility policies as JetBlue.","document":"Opens the pdf document file."},"BFF":{"intersectionRootMargin":"0px","defaultMonthsToLoad":"2","autoLoadMonths":"true","intersectionThreshold":"0.33","intersectionDebounce":"1000"},"paths":[{"flightBlockImagePrefix":"/ui-assets/imagery/destinations/large","imagesRootPath":"/magnoliapublic/dam/ui-assets"}],"JTP":{"topVacationDestinations":"XFL,ZLA,XBO,XSF,PUJ,CUN,AUA,MBJ,MCO,LAS,FLL,SJU,NAS,NYC,SXM,RSW,TPA,POP,PLS,UVF,SJD,LAX,BGI,SJO,MSY,BNA,CUR,SDQ,BDA,BOS,PBI,WAS,SFO,CTG,SAV,GND,CHS,ANU,PVR"},"directoryForwarding":{"JbMpExclude":"DF","forceFixDoubleFr":"true","browserUrlDF":"true"},"supportedLanguages":{"en":"jetblue.com","fr":"jetblue.com","es":"hola.jetblue.com"},"bookerRestrictedOriginsModalWarning":{"ZZZ":[{"content":"Flights from Paris will be available on JetBlue starting April 3. In the meantime please see other options to book.","title":"This trip is not available yet on jetblue.com","continueButton":"false","linkButtons":[{"target":"_self","href":"https://www.jetblue.com/flying-with-us/uk-and-europe","title":"See other booking options"},{"target":"_self","href":"https://www-qa3.jetblue.com/flying-with-us/uk-and-europe-fr","title":"Autres options de réservation"}]}],"ZXZ":[{"title":"title","content":"content","continueButton":"true"}]},"polling":{"shortPollFlightTrackerDurationInSeconds":"0"},"additionalSitemapRoutes":{"_forgot-password_email-entry":"internal"},"templateVersionDefaults":{"global":"v3","cms":"v3"}};
</script>
<script type="text/javascript" id="abtest-config">window.__ABTEST_CONFIG = {"jbCampaign":[{"platform":"Desktop","global":"global","name":"nfs-booker-prices_20230321","dateend":"2023-03-20T14:54:29.850-04:00","userAgent":"All","datestart":"2023-03-20T14:54:29.843-04:00","path":["/home/sale/big-spring-sale-23"],"cookieParam":[{"name":"nfs-booker-prices_20230321","reset":"true","days":"4","hours":"0"}],"experience":[{"name":"A","split":"0.5","track":"true"},{"name":"B","split":"0.5","track":"true"},{"name":"C","split":"0","track":"true"},{"name":"D","split":"0","track":"true"}]},{"platform":"All","global":"global","name":"JBC_PB2AB_20230729","dateend":"2023-07-31T23:59:18.513-04:00","userAgent":"All","datestart":"2023-07-29T00:00:18.503-04:00","path":["/home"],"cookieParam":[{"hours":"0","name":"JBC_PB2AB_20230729","reset":"true","days":"3"}],"experience":[{"name":"A","split":".50","track":"true"},{"name":"B","split":".50","track":"true"},{"name":"C","split":"0","track":"false"},{"name":"D","split":"0","track":"false"}]}]};</script>
<script type="text/javascript" id="appdynamics-config" src="/ui-assets/monitoring/adrum-config.js"></script>
<script type="text/javascript" id="appdynamics" src="/ui-assets/monitoring/adrum.js"></script>
<style>@font-face{font-family:JBAvenir;src:url(avenir-next-regular.cb5cb023d11e44c7.eot);src:url(avenir-next-regular.cb5cb023d11e44c7.eot?#iefix) format("eot"),url(avenir-next-regular.13d777ec9ed091ad.woff2) format("woff2"),url(avenir-next-regular.f4e88afbd53929ed.woff) format("woff"),url(avenir-next-regular.b2ccd97d3c62f0b4.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:JBAvenir;src:url(avenir-next-regular.cb5cb023d11e44c7.eot);src:url(avenir-next-regular.cb5cb023d11e44c7.eot?#iefix) format("eot"),url(avenir-next-regular.13d777ec9ed091ad.woff2) format("woff2"),url(avenir-next-regular.f4e88afbd53929ed.woff) format("woff"),url(avenir-next-regular.b2ccd97d3c62f0b4.ttf) format("truetype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:JBAvenir;src:url(avenir-next-demi.e7867a04ac7b3c32.eot);src:url(avenir-next-demi.e7867a04ac7b3c32.eot?#iefix) format("eot"),url(avenir-next-demi.491bd2d50f3c5235.woff2) format("woff2"),url(avenir-next-demi.11d495d8a8ae2d26.woff) format("woff"),url(avenir-next-demi.bb0cb42e2fa03152.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:JBAvenir;src:url(avenir-next-demi.e7867a04ac7b3c32.eot);src:url(avenir-next-demi.e7867a04ac7b3c32.eot?#iefix) format("eot"),url(avenir-next-demi.491bd2d50f3c5235.woff2) format("woff2"),url(avenir-next-demi.11d495d8a8ae2d26.woff) format("woff"),url(avenir-next-demi.bb0cb42e2fa03152.ttf) format("truetype");font-weight:800;font-style:normal;font-display:swap}@font-face{font-family:JBAvenir;src:url(avenir-next-demi.e7867a04ac7b3c32.eot);src:url(avenir-next-demi.e7867a04ac7b3c32.eot?#iefix) format("eot"),url(avenir-next-demi.491bd2d50f3c5235.woff2) format("woff2"),url(avenir-next-demi.11d495d8a8ae2d26.woff) format("woff"),url(avenir-next-demi.bb0cb42e2fa03152.ttf) format("truetype");font-weight:900;font-style:normal;font-display:swap}html{font-family:JBAvenir,avenir,arial;font-size:1rem;line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}svg:not(:root){overflow:hidden}html,body,div{box-sizing:border-box}@supports (-webkit-overflow-scrolling: touch){body{cursor:pointer;-webkit-tap-highlight-color:#fff}}:root{--jb-show-asapp-chat:none}</style><link rel="stylesheet" href="styles.3d5ee7d1d2582bd7.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles.3d5ee7d1d2582bd7.css"></noscript>
<meta name="version" content="4c6a0382a" >
</head>
<body>
<style>
.loader {
height: 100vh;
width: 100vw;
display: flex;
justify-content: center;
align-items: center;
fill: #00205b;
}
@-webkit-keyframes animation1 {
0%,
16.67%,
to {
opacity: 0.2;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
8.33% {
opacity: 0.1;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
25%,
91.67% {
opacity: 0.4;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
33.33%,
83.33% {
opacity: 0.6;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
41.67%,
75% {
opacity: 0.8;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
50%,
58.33%,
66.67% {
opacity: 1;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
}
@keyframes animation1 {
0%,
16.67%,
to {
opacity: 0.2;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
8.33% {
opacity: 0.1;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
25%,
91.67% {
opacity: 0.4;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
33.33%,
83.33% {
opacity: 0.6;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
41.67%,
75% {
opacity: 0.8;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
50%,
58.33%,
66.67% {
opacity: 1;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
}
@-webkit-keyframes animation3 {
0%,
8.33%,
91.67%,
to {
opacity: 0.2;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
16.67%,
83.33% {
opacity: 0.4;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
25%,
75% {
opacity: 0.6;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
33.33%,
66.67% {
opacity: 0.8;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
41.67%,
50%,
58.33% {
opacity: 1;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
}
@keyframes animation3 {
0%,
8.33%,
91.67%,
to {
opacity: 0.2;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
16.67%,
83.33% {
opacity: 0.4;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
25%,
75% {
opacity: 0.6;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
33.33%,
66.67% {
opacity: 0.8;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
41.67%,
50%,
58.33% {
opacity: 1;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
}
@-webkit-keyframes animation2 {
0%,
83.33%,
91.67%,
to {
opacity: 0.2;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
75%,
8.33% {
opacity: 0.4;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
16.67%,
66.67% {
opacity: 0.6;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
25%,
58.33% {
opacity: 0.8;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
33.33%,
41.67%,
50% {
opacity: 1;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
}
@keyframes animation2 {
0%,
83.33%,
91.67%,
to {
opacity: 0.2;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
75%,
8.33% {
opacity: 0.4;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
16.67%,
66.67% {
opacity: 0.6;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
25%,
58.33% {
opacity: 0.8;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
33.33%,
41.67%,
50% {
opacity: 1;
transform-box: fill-box;
-webkit-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
}
#kebab * {
-webkit-animation-duration: 1.2s;
animation-duration: 1.2s;
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite;
-webkit-animation-timing-function: cubic-bezier(0, 0, 1, 1);
animation-timing-function: cubic-bezier(0, 0, 1, 1);
}
</style>
<jb-app>
<div class="loader">
<svg id="kebab" xmlns="http://www.w3.org/2000/svg" width="5em" height="5em" viewBox="0 0 42 5" focusable="false">
<style></style>
<circle cx="2.5" cy="2.5" r="2.5" style="
-webkit-animation-name: animation2;
animation-name: animation2;
-webkit-animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
"></circle>
<circle cx="20.5" cy="2.5" r="2.5" style="
-webkit-animation-name: animation3;
animation-name: animation3;
-webkit-animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
"></circle>
<circle cx="38.5" cy="2.5" r="2.5" style="
-webkit-animation-name: animation1;
animation-name: animation1;
-webkit-animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
" class=""></circle>
</svg>
</div>
</jb-app>
<script type="text/javascript" id="cookie-consent">
if (window && window.__DOTCOM_ENV_CONFIG && window.__DOTCOM_ENV_CONFIG.flags && window.__DOTCOM_ENV_CONFIG.flags.cookieConsent === 'true') {
const div = document.createElement('div', { id: 'consent_blackbar' });
document.body.appendChild(div);
const scriptSrc = window.__DOTCOM_ENV_CONFIG.widgets.cookieConsent.src;
const head = document.getElementsByTagName('head')[0];
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = scriptSrc;
script.async = 'async';
script.crossorigin = 'true';
document.head.appendChild(script);
}</script>
<script type="text/javascript" id="initial-sitemap" src="/initial-sitemap.js"></script>
<script type="text/javascript" delay="/browser-warning/browser-detector.js" async="" defer></script>
<script src="runtime.89acb4e594c96bc6.js" type="module"></script><script src="polyfills.bfdaeee7173081a2.js" type="module"></script><script src="vendor.3c3ec326b1ff0d76.js" type="module"></script><script src="main.a62f118cd33f28b0.js" type="module"></script>
</body></html>`, {
// url: "https://www.jetblue.com/booking/flights?from=JFK&to=STT&depart=2023-09-14&return=2023-09-16&isMultiCity=false&noOfRoute=1&lang=en&adults=1&children=0&infants=0&sharedMarket=false&roundTripFaresFlag=false&usePoints=false",
url: "https://www.jetblue.com",
// window.location,document.URL
// referrer: "https://www.jetblue.com/booking/flights?from=JFK&to=STT&depart=2023-09-14&return=2023-09-16&isMultiCity=false&noOfRoute=1&lang=en&adults=1&children=0&infants=0&sharedMarket=false&roundTripFaresFlag=false&usePoints=false",
referrer: "https://www.jetblue.com/",
// document.referrer
contentType: "text/html",
// document.contentType
// userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
// UA
includeNodeLocations: false // 保留由HTML解析器生成的位置信息,允许使用nodeLocation()方法
});
\ No newline at end of file
import { createRequire } from "https://deno.land/std@0.173.0/node/module.ts";
const require = createRequire(import.meta.url);
// Loads native module polyfill.
const path = require("path");
// Loads extensionless module.
const cjsModule = require("../jsdom");
// Visits node_modules.
const fs = require("fs");
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -331,8 +331,7 @@ let fonts = [{"font": "50px sans-serif", "text": "0-_{w."}, {
}, {"font": "1000px fantasy", "text": "঳"}, {"font": "1000px fantasy", "text": "᱐"}, {
"font": "1000px fantasy",
"text": "☙"
}]
fonts = [{"font": "72px monospace", "text": "mmmmmmmmlli"}, {
}, {"font": "72px monospace", "text": "mmmmmmmmlli"}, {
"font": "72px sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px serif", "text": "mmmmmmmmlli"}, {
......@@ -719,19 +718,13 @@ let screenParams = {
colorDepth: screen.colorDepth,
}
let features;
try {
features = document.featurePolicy.features();
} catch (e) {
}
let featurePolicy;
if (document.featurePolicy) {
debugger;
featurePolicy = {
features: features,
features: document.featurePolicy.features(),
allowedFeatures: document.featurePolicy.allowedFeatures(),
getAllowlistForFeature: 'url',
}
}
let windowParams = {
......@@ -869,6 +862,7 @@ setTimeout(function (){
windowParams: windowParams,
screenParams: screenParams,
navigatorParams: navigatorParams,
featurePolicy: featurePolicy,
plugins: plgs,
mimeTypes: mimes,
fontsRes: fontsRes,
......
{
"jsdom": "https://esm.sh/jsdom"
"jsdom": "file:///Users/wang/Documents/company/shape-bypass/jsdom"
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -2,10 +2,10 @@ let proxy = function (tt, name) {
return new Proxy(tt, {
get(target, p, receiver) {
let res = Reflect.get(target, p, receiver);
// console.log(`${name} get`, p, typeof res)
// if (!['_registeredHandlers', 'window', '_currentEvent', '_eventListenerss','JSON','Math','JSON'].includes(p) && res && typeof res === 'object' && typeof p !== 'symbol') {
// return proxy(res, `${name}.${p}`)
// }
console.log(`${name} get`, p, typeof res)
if (!['_registeredHandlers', 'window', '_currentEvent', '_eventListenerss','JSON','Math','JSON'].includes(p) && res && typeof res === 'object' && typeof p !== 'symbol') {
return proxy(res, `${name}.${p}`)
}
return res;
}
})
......@@ -265,7 +265,7 @@ function Window(options) {
// debugger;
// }
let res = Reflect.get(target, p, receiver);
if (!['Object','Window' , 'debug','Math'].includes(p)){
if (!['Object','Window' , 'debug','Math', 'Array'].includes(p)){
console.log('window get', p, typeof res)
}
......@@ -467,6 +467,7 @@ function Window(options) {
return screen;
},
get origin() {
console.log('getorigin')
return window._origin;
},
// The origin IDL attribute is defined with [Replaceable].
......
......@@ -232,7 +232,7 @@ exports.install = (globalObject, globalNames) => {
return utils.tryWrapperForImpl(esValue[implSymbol].getElementsByClassName(...args));
}
featurePolicy() {
get featurePolicy() {
class FeaturePolicy{
constructor(props) {
......@@ -254,7 +254,7 @@ exports.install = (globalObject, globalNames) => {
},
getAllowlistForFeature: {
value: function (){
return 'https://www.jetblue.com/'
return ['https://www.jetblue.com/']
},
enumerable: true
}
......
......@@ -2787,8 +2787,8 @@ class CanvasRenderingContext2D {
console.log('CanvasRenderingContext2D.translate')
}
arc() {
console.log('CanvasRenderingContext2D.arc', arguments)
arc(a,b,c,d,e) {
console.log('CanvasRenderingContext2D.arc', a,b,c,d,e)
return this._context.arc(...arguments)
}
......@@ -2820,7 +2820,7 @@ class CanvasRenderingContext2D {
}
fillRect(a,b,c,d) {
console.log('CanvasRenderingContext2D.fillRect', arguments)
console.log('CanvasRenderingContext2D.fillRect', a,b,c,d)
return this._context.fillRect(a,b,c,d)
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -4824,7 +4824,7 @@
}
})
print([].slice.call(res).join('iii'))
console.log([].slice.call(res).join('iii'))
}
times++;
// print({opcodeHandlerCounter: vmContext.opcodeHandlerCounter, programCounter: vmContext.programCounter, reg: vmContext.reg})
......
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment