Help
RSS
API
Feed
Maltego
Contact
Domain > blog.jjhh.xyz
×
Welcome!
Right click nodes and scroll the mouse to navigate the graph.
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-09-14
172.67.132.165
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyDate: Sat, 14 Sep 2024 23:02:45 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveCache-Control: max-age3600Expires: Sun, 15 Sep 2024 00:02:45 GMTLocation: https://blog.jjhh.xyz/Report-To: {endpoints:{url:https:\/\/a.nel.cloudflare.com\/report\/v4?sgNJ2W0YNie1d8HLRILvPVdgAdGg%2BYgO1MA09VvwQ79mutpdPl41%2FH8fYNGKekHOItMTOkrVMPS%2FTvTUNrd9rBNcHkkhzTuZNsj%2B0P5vXOFCbbMRXtPXprbUB6fzW9%2F09},group:cf-nel,max_age:604800}NEL: {success_fraction:0,report_to:cf-nel,max_age:604800}Server: cloudflareCF-RAY: 8c3401a88abc30a0-SEAalt-svc: h3:443; ma86400 html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>cloudflare/center>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Sat, 14 Sep 2024 23:02:46 GMTContent-Type: text/html; charsetUTF-8Transfer-Encoding: chunkedConnection: keep-aliveAge: 0Cache-Control: public,max-age0,must-revalidatecache-status: Netlify Edge; fwdmissstrict-transport-security: max-age31536000vary: Accept-Encodingx-nf-request-id: 01J7SCCHGNK7D3QTCZDNAV9J1HCF-Cache-Status: DYNAMICReport-To: {endpoints:{url:https:\/\/a.nel.cloudflare.com\/report\/v4?sCUl50Sm6db%2BijbmdCa91xdZb8qPek8EgNJzUbBCjlzwyZ9IHSBlYGjQwDdJrL6p1D8gL%2FMKaU5bU5i6pXA9Y4Ryw9vvhty8Cycx6p0efZlenbNAZ%2BUDrcpBXcT3uBIms},group:cf-nel,max_age:604800}NEL: {success_fraction:0,report_to:cf-nel,max_age:604800}Server: cloudflareCF-RAY: 8c3401a8eb4b3084-SEAalt-svc: h3:443; ma86400 !DOCTYPE html>html langzh>head>title>Home/title>meta nameviewport contentwidthdevice-width, initial-scale1.0>script srchttps://fastly.jsdelivr.net/npm/mermaid@9.4.0/dist/mermaid.min.js typeb2aedcf1ca984f7a38d42961-text/javascript>/script>script typeb2aedcf1ca984f7a38d42961-text/javascript> mermaid.initialize({ startOnLoad: true, });/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/prism.min.js integritysha512-hpZ5pDCF2bRCweL5WoA0/N1elet1KYL5mx3LP555Eg/0ZguaHawxNvEjF6O3rufAChs16HVNhEc6blF/rZoowQ crossoriginanonymous referrerpolicyno-referrer typeb2aedcf1ca984f7a38d42961-text/javascript>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/plugins/autoloader/prism-autoloader.min.js integritysha512-sv0slik/5O0JIPdLBCR2A3XDg/1U3WuDEheZfI/DI5n8Yqc3h5kjrnr46FGBNiUAJF7rE4LHKwQ/SoSLRKAxEA crossoriginanonymous referrerpolicyno-referrer typeb2aedcf1ca984f7a38d42961-text/javascript>/script>script srchttps://cdn.jsdelivr.net/npm/lucide@0.115.0/dist/umd/lucide.min.js typeb2aedcf1ca984f7a38d42961-text/javascript>/script>script typeb2aedcf1ca984f7a38d42961-text/javascript> // Create callout icons window.addEventListener(load, () > { document.querySelectorAll(.callout).forEach((elem) > { const icon getComputedStyle(elem).getPropertyValue(--callout-icon); const iconName icon && icon.trim().replace(/^lucide-/, ); if (iconName) { const calloutTitle elem.querySelector(.callout-title); if (calloutTitle) { const calloutIconContainer document.createElement(div); const calloutIcon document.createElement(i); calloutIconContainer.appendChild(calloutIcon); calloutIcon.setAttribute(icon-name, iconName); calloutIconContainer.setAttribute(class, callout-icon); calloutTitle.insertBefore(calloutIconContainer, calloutTitle.firstChild); } } }); lucide.createIcons(); // Collapse callouts Array.from(document.querySelectorAll(.callout.is-collapsible)).forEach((elem) > { elem.querySelector(.callout-title).addEventListener(click, (event) > { if (elem.classList.contains(is-collapsed)) { elem.classList.remove(is-collapsed); } else { elem.classList.add(is-collapsed); } }); }); });/script>script srchttps://fastly.jsdelivr.net/npm/force-graph@1.43.0/dist/force-graph.min.js typeb2aedcf1ca984f7a38d42961-text/javascript>/script>script defer srchttps://fastly.jsdelivr.net/npm/@alpinejs/persist@3.11.1/dist/cdn.min.js typeb2aedcf1ca984f7a38d42961-text/javascript>/script>script srchttps://fastly.jsdelivr.net/npm/alpinejs@3.11.1/dist/cdn.min.js defer typeb2aedcf1ca984f7a38d42961-text/javascript>/script>link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/themes/prism-okaidia.min.css integritysha512-mIs9kKbaw6JZFfSuo+MovjU+Ntggfoj8RwAmJbVXQ5mkAX5LlgETQEweFPI18humSPHymTb5iikEOKWF7I8ncQ crossoriginanonymous referrerpolicyno-referrer>script srchttps://fastly.jsdelivr.net/npm/whatwg-fetch@3.6.2/dist/fetch.umd.min.js crossoriginanonymous referrerpolicyno-referrer typeb2aedcf1ca984f7a38d42961-text/javascript>/script>script srchttps://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?featureses6 typeb2aedcf1ca984f7a38d42961-text/javascript>/script>link href/styles/digital-garden-base.css relstylesheet>link href/styles/obsidian-base.css relstylesheet>link href/styles/_theme.bb304942.css relstylesheet>link href/styles/custom-style.css relstylesheet>link relicon href/favicon.ico sizesany>link relicon href/favicon.svg typeimage/svg+xml>link relapple-touch-icon href/apple-touch-icon.png>link relmanifest href/manifest.webmanifest>style>/style>/head>body classtheme-light markdown-preview-view markdown-rendered markdown-preview-section >div x-initisDesktop (window.innerWidth>1400) ? true: false; x-on:resize.windowisDesktop (window.innerWidth>1400) ? true : false; x-data{isDesktop: true, showFilesMobile: false}>div x-show.important!isDesktop styledisplay: none;>nav classnavbar>div classnavbar-inner>span stylefont-size: 1.5rem; margin-right: 10px; @clickshowFilesMobile!showFilesMobile>i icon-namemenu>/i>/span>a href/ styletext-decoration: none;>h1 stylemargin: 15px !important;>Color's blog/h1>/a>/div>div classsearch-button align-icon onclickif (!window.__cfRLUnblockHandlers) return false; toggleSearch() data-cf-modified-b2aedcf1ca984f7a38d42961->span classsearch-icon>i icon-namesearch>/i>/span>span classsearch-text>span>Search/span>span stylefont-size: 0.6rem; padding: 2px 2px 0 6px; text-align:center; transform: translateY(4px); classsearch-keys>CTRL + K/span>/span>/div>/nav>/div>div x-showshowFilesMobile && !isDesktop @clickshowFilesMobile false styledisplay:none; classfullpage-overlay>/div>nav classfiletree-sidebar x-show.importantisDesktop || showFilesMobile styledisplay: none;>a href/ styletext-decoration: none;>h1 styletext-align:center;>Color's blog/h1>/a>div styledisplay: flex; justify-content: center;>div classsearch-button align-icon onclickif (!window.__cfRLUnblockHandlers) return false; toggleSearch() data-cf-modified-b2aedcf1ca984f7a38d42961->span classsearch-icon>i icon-namesearch>/i>/span>span classsearch-text>span>Search/span>span stylefont-size: 0.6rem; padding: 2px 2px 0 6px; text-align:center; transform: translateY(4px); classsearch-keys>CTRL + K/span>/span>/div>/div>div classfolder x-data{isOpen: true}>div x-showisOpen styledisplay:none class>div classfolder inner-folder x-data{isOpen: $persist(false).as(bp系统评分设计)} @click.stopisOpen!isOpen>div classfoldername-wrapper align-icon>i x-showisOpen styledisplay: none; icon-namechevron-down>/i>i x-show!isOpen icon-namechevron-right>/i>span classfoldername>bp系统评分设计/span>/div>div x-showisOpen styledisplay:none classfilelist>div @click.stop classnotelink >i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/bp/3-9/>3.9 /a>/div>/div>/div>/div>div x-showisOpen styledisplay:none class>div @click.stop classnotelink active-note>i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/>Home /a>/div>/div>/div>/nav>/div>div classsearch-container idglobalsearch onclickif (!window.__cfRLUnblockHandlers) return false; toggleSearch() data-cf-modified-b2aedcf1ca984f7a38d42961->div classsearch-box>input typesearch idterm placeholderStart typing...>div idsearch-results>/div>footer classsearch-box-footer>div classnavigation-hint>span>Enter to select/span>/div>div classnavigation-hint align-icon>i icon-namearrow-up aria-hiddentrue>/i>i icon-namearrow-down aria-hiddentrue>/i>span>to navigate/span>/div>div classnavigation-hint>span>ESC to close/span>/div>/footer>/div>/div>script srchttps://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js typeb2aedcf1ca984f7a38d42961-text/javascript>/script>script typeb2aedcf1ca984f7a38d42961-text/javascript> document.addEventListener(DOMContentLoaded, init, false); document.addEventListener(DOMContentLoaded, setCorrectShortcut, false); window.toggleSearch function () { if (document.getElementById(globalsearch).classList.contains(active)) { document .getElementById(globalsearch) .classList .remove(active); } else { document .getElementById(globalsearch) .classList .add(active); document .getElementById(term) .focus(); } } window.toggleTagSearch function (evt) { console.log(evt.textContent); const term evt.textContent; if (term) { window .document .getElementById(term) .value term.trim(); window.toggleSearch(); window.search(); } } const loadingSvg ` svg width100 height100 viewBox0 0 45 45 xmlnshttp://www.w3.org/2000/svg stroke#fff> g fillnone fill-ruleevenodd transformtranslate(1 1) stroke-width2> circle cx22 cy22 r6 stroke-opacity0> animate attributeNamer begin1.5s dur3s values6;22 calcModelinear repeatCountindefinite /> animate attributeNamestroke-opacity begin1.5s dur3s values1;0 calcModelinear repeatCountindefinite /> animate attributeNamestroke-width begin1.5s dur3s values2;0 calcModelinear repeatCountindefinite /> /circle> circle cx22 cy22 r6 stroke-opacity0> animate attributeNamer begin3s dur3s values6;22 calcModelinear repeatCountindefinite /> animate attributeNamestroke-opacity begin3s dur3s values1;0 calcModelinear repeatCountindefinite /> animate attributeNamestroke-width begin3s dur3s values2;0 calcModelinear repeatCountindefinite /> /circle> circle cx22 cy22 r8> animate attributeNamer begin0s dur1.5s values6;1;2;3;4;5;6 calcModelinear repeatCountindefinite /> /circle> /g> /svg>`; function debounce(func, wait, immediate) { var timeout; return function () { var context this, args arguments; var later function () { timeout null; if (!immediate) func.apply(context, args); }; var callNow immediate && !timeout; clearTimeout(timeout); timeout setTimeout(later, wait); if (callNow) func.apply(context, args); }; }; function setCorrectShortcut() { if (navigator.platform.toUpperCase().indexOf(MAC) > 0) { document .querySelectorAll(.search-keys) .forEach(x > x.innerHTML ⌘ + K); } } function createIndex(posts) { const encoder (str) > str .toLowerCase() .split(/(^a-z|^\x00-\x7F)/) const contentIndex new FlexSearch.Document({ cache: true, charset: latin:extra, optimize: true, index: { field: content, tokenize: reverse, encode: encoder }, { field: title, tokenize: forward, encode: encoder }, { field: tags, tokenize: forward, encode: encoder } }) posts.forEach((p, idx) > { contentIndex.add({ id: idx, title: p.title, content: p.content, tags: p.tags //Change to removeHTML }) }); return contentIndex; } async function init() { //init offline search index const searchIndexDate 2024-03-09T15:51:55.592Z; let shouldFetch true; if(localStorage.getItem(searchIndex)) { let {date, docs} JSON.parse(localStorage.getItem(searchIndex)); if(date searchIndexDate){ shouldFetch false; let index createIndex(docs); window.docs docs window.index index; } } if(shouldFetch){ let docs await(await fetch(/searchIndex.json?v2024-03-09T15:51:55.592Z)).json(); let index createIndex(docs); localStorage.setItem(searchIndex, JSON.stringify({date: 2024-03-09T15:51:55.592Z, docs})); window.docs docs window.index index; } //open searchmodal when ctrl + k is pressed, cmd + k on mac document.addEventListener(keydown, (e) > { if ((e.ctrlKey || e.metaKey) && e.key k) { e.preventDefault(); toggleSearch(); } if (e.key Escape) { document .getElementById(globalsearch) .classList .remove(active); } //navigate search results with arrow keys if (document.getElementById(globalsearch).classList.contains(active)) { if (e.key ArrowDown) { e.preventDefault(); let active document.querySelector(.searchresult.active); if (active) { active .classList .remove(active); if (active.nextElementSibling) { active .nextElementSibling .classList .add(active); } else { document .querySelector(.searchresult) .classList .add(active); } } else { document .querySelector(.searchresult) .classList .add(active); } let currentActive document.querySelector(.searchresult.active); if (currentActive) { currentActive.scrollIntoView({behavior: smooth, block: nearest, inline: start}); } } if (e.key ArrowUp) { e.preventDefault(); let active document.querySelector(.searchresult.active); if (active) { active .classList .remove(active); if (active.previousElementSibling) { active .previousElementSibling .classList .add(active); } else { document .querySelectorAll(.searchresult) .forEach((el) > { if (!el.nextElementSibling) { el .classList .add(active); } }); } } else { document .querySelectorAll(.searchresult) .forEach((el) > { if (el.nextElementSibling) { el .classList .add(active); } }); } let currentActive document.querySelector(.searchresult.active); if (currentActive) { currentActive.scrollIntoView({behavior: smooth, block: nearest, inline: start}); } } if (e.key Enter) { e.preventDefault(); let active document.querySelector(.searchresult.active); if (active) { window.location.href active .querySelector(a) .href; } } } }); const debouncedSearch debounce(search, 200, false); field document.querySelector(#term); field.addEventListener(keydown, (e) > { if (e.key ! ArrowDown && e.key ! ArrowUp) { debouncedSearch(); } }); resultsDiv document.querySelector(#search-results); const params new URL(location.href).searchParams; if (params.get(q)) { field.setAttribute(value, params.get(q)); toggleSearch(); search(); } } window.lastSearch ; async function search() { let search field .value .trim(); if (!search) return; if (search lastSearch) return; console.log(`search for ${search}`); window.lastSearch search; resultsDiv.innerHTML loadingSvg; //let searchRequest await fetch(`/api/search?term${encodeURIComponent(search)}`); //let results await searchRequest.json(); let results offlineSearch(search); let resultsHTML ; if (!results.length) { let resultParagraph document.createElement(p); resultParagraph.innerText `No results for ${search}`; resultsDiv.innerHTML ; resultsDiv.appendChild(resultParagraph); return; } resultsHTML + div stylemax-width:100%;>; // we need to add title, url from ref results.forEach(r > { if(r.tags && r.tags.length > 0){ resultsHTML + `div classsearchresult> a classsearch-link href${r.url}>${r.title}/a> div onclickwindow.location${r.url}> div classheader-meta> div classheader-tags> ${r.tags.map(tag>a classtag hrefJavaScript:Void(0);>#+tag+/a>).join()} /div> /div> ${r.content} /div> /div>`; } else { resultsHTML + `div classsearchresult> a classsearch-link href${r.url}>${r.title}/a> div onclickwindow.location${r.url}> ${r.content} /div> /div>`; } }); resultsHTML + /div>; resultsDiv.innerHTML resultsHTML; } function truncate(str, size) { //first, remove HTML str str.replaceAll(/^>*>/g, ); if (str.length size) return str; return str.substring(0, size - 3) + ...; } function offlineSearch(searchQuery) { let data window.docs; let isTagSearch searchQuery0 # && searchQuery.length > 1; let searchResults isTagSearch ? index.search(searchQuery.substring(1), { field: tags } ) : index.search(searchQuery, { field: title, limit: 5 }, { field: content, weight: 10 } ); const getByField (field) > { const results searchResults.filter((x) > x.field field) if (results.length 0) { return } else { return ...results0.result } } const allIds new Set( ...getByField(title), ...getByField(content), ...getByField(tags) ) const dataIds ...allIds; const finalResults dataIds.map((id) > { let result dataid; result.content truncate(result.content, 400); result.tags result .tags .filter((x) > x ! gardenEntry && x ! note); //Note is automatically added by 11ty. GardenEntry is used internally to mark the home page return result; }) return finalResults; }/script>main classcontent cm-s-obsidian >header>h1>/h1>div classheader-meta>div classheader-tags>/div>/div>/header>h2 id20 tabindex-1>前言--(20 岁生日)/h2>p>很久之前也创建过一个博客,但是随着时间font color#2DC26B>烟消云散/font>了。我记得那应该是一个 html 的文件,我把它加到一个免费的服务器上面 php 一键部署, 青涩的改了改其中的内容。而这次我用 obsidian 以及 GitHub 的 git 功能搭建了这一个博客。希望能成为记录我生活和学习生涯的博客吧。br>不知道从哪里开始写,这篇笔记也是想了很久很久。Obsidian 是一款很好的笔记软件,但是有的时候我好像更沉迷于设置这些项目,这些主题,以及刻画出我想要的工作区,而对内容的追求过于少了。br>上学期用途最多就是在整理 python 和数据库的期末重点,因为在这里面代码块可以很好的展现。显然,我对他的了解还太少了。所以,从现在开始,我就开始了对他的初步探索了。/p>/main>aside>div classsidebar>div classsidebar-container>script typeb2aedcf1ca984f7a38d42961-text/javascript> async function fetchGraphData() { const graphData await fetch(/graph.json).then(res > res.json()); const fullGraphData filterFullGraphData(graphData); return {graphData, fullGraphData} } function getNextLevelNeighbours(existing, remaining) { const keys Object.values(existing).map((n) > n.neighbors).flat(); const n_remaining Object.keys(remaining).reduce((acc, key) > { if (keys.indexOf(key) ! -1) { if (!remainingkey.hide) { existingkey remainingkey; } } else { acckey remainingkey; } return acc; }, {}); return existing, n_remaining; } function filterLocalGraphData(graphData, depth) { if (graphData null) { return null; } let remaining JSON.parse(JSON.stringify(graphData.nodes)); let links JSON.parse(JSON.stringify(graphData.links)); let currentLink decodeURI(window.location.pathname); let currentNode remainingcurrentLink || Object.values(remaining).find((v) > v.home); delete remainingcurrentNode.url; if (!currentNode.home) { let home Object.values(remaining).find((v) > v.home); delete remaininghome.url; } currentNode.current true; let existing {}; existingcurrentNode.url currentNode; for (let i 0; i depth; i++) { existing, remaining getNextLevelNeighbours(existing, remaining); } nodes Object.values(existing); if (!currentNode.home) { nodes nodes.filter(n > !n.home); } let ids nodes.map((n) > n.id); return { nodes, links: links.filter(function (con) { return ids.indexOf(con.target) > -1 && ids.indexOf(con.source) > -1; }), } } function getCssVar(variable) {return getComputedStyle(document.body).getPropertyValue(variable)} function htmlDecode(input) { var doc new DOMParser().parseFromString(input, text/html); return doc.documentElement.textContent; } function renderGraph(graphData, id, delay, fullScreen) { if (graphData null) { return; } const el document.getElementById(id); width el.offsetWidth; height el.offsetHeight; const highlightNodes new Set(); let hoverNode null; const color getCssVar(--graph-main); const mutedColor getCssVar(--graph-muted); let Graph ForceGraph() (el) .graphData(graphData) .nodeId(id) .nodeLabel(title) .linkSource(source) .linkTarget(target) .d3AlphaDecay(0.10) .width(width) .height(height) .linkDirectionalArrowLength(2) .linkDirectionalArrowRelPos(0.5) .autoPauseRedraw(false) .linkColor((link) > { if (hoverNode null) { return color; } if (link.source.id hoverNode.id || link.target.id hoverNode.id) { return color; } else { return mutedColor; } }) .nodeCanvasObject((node, ctx) > { const numberOfNeighbours (node.neighbors && node.neighbors.length) || 2; const nodeR Math.min(7, Math.max(numberOfNeighbours / 2, 2)); ctx.beginPath(); ctx.arc(node.x, node.y, nodeR, 0, 2 * Math.PI, false); if (hoverNode null) { ctx.fillStyle color; } else { if (node hoverNode || highlightNodes.has(node.url)) { ctx.fillStyle color; } else { ctx.fillStyle mutedColor; } } ctx.fill(); if (node.current) { ctx.beginPath(); ctx.arc(node.x, node.y, nodeR + 1, 0, 2 * Math.PI, false); ctx.lineWidth 0.5; ctx.strokeStyle color; ctx.stroke(); } const label htmlDecode(node.title) const fontSize 3.5; ctx.font `${fontSize}px Sans-Serif`; ctx.textAlign center; ctx.textBaseline top; ctx.fillText(label, node.x, node.y + nodeR + 2); }) .onNodeClick(node > { window.location node.url; }) .onNodeHover(node > { highlightNodes.clear(); if (node) { highlightNodes.add(node); node.neighbors.forEach(neighbor > highlightNodes.add(neighbor)); } hoverNode node || null; }); if (fullScreen || (delay ! null && graphData.nodes.length > 4)) { setTimeout(() > { Graph.zoomToFit(5, 75); }, delay || 200); } return Graph; } function renderLocalGraph(graphData, depth, fullScreen) { if (window.graph){ window.graph._destructor(); } const data filterLocalGraphData(graphData, depth); return renderGraph(data, link-graph, null, fullScreen); } function filterFullGraphData(graphData) { if (graphData null) { return null; } graphData JSON.parse(JSON.stringify(graphData)); const hiddens Object.values(graphData.nodes).filter((n) > n.hide).map((n) > n.id); const data { links: JSON.parse(JSON.stringify(graphData.links)).filter((l) > hiddens.indexOf(l.source) -1 && hiddens.indexOf(l.target) -1), nodes: ...Object.values(graphData.nodes).filter((n) > !n.hide) } return data } function openFullGraph(fullGraphData) { lucide.createIcons({ attrs: { class: svg-icon } }); return renderGraph(fullGraphData, full-graph-container, 200, false);; } function closefullGraph(fullGraph) { if (fullGraph) { fullGraph._destructor(); } return null; }/script>div x-init{graphData, fullGraphData} await fetchGraphData(); x-data{ graphData: null, depth: 1, graph: null, fullGraph: null, showFullGraph: false, fullScreen: false, fullGraphData: null} idgraph-component x-bind:classfullScreen ? graph graph-fs : graph v-scope>div classgraph-title-container>div classgraph-title>Connected Pages/div>div idgraph-controls>div classdepth-control>label forgraph-depth>Depth/label>div classslider>input x-model.numberdepth namegraph-depth listdepthmarkers typerange step1 min1 max3 idgraph-depth>datalist iddepthmarkers>option value1 label1>/option>option value2 label2>/option>option value3 label3>/option>/datalist>/div>span iddepth-display x-textdepth>/span>/div>div classctrl-right>span idglobal-graph-btn x-on:clickshowFullGraph true; setTimeout(() > {fullGraph openFullGraph(fullGraphData)}, 100)>i icon-nameglobe aria-hiddentrue>/i>/span>span idgraph-fs-btn x-on:clickfullScreen !fullScreen>i icon-nameexpand aria-hiddentrue>/i>/span>/div>/div>/div>div x-effectwindow.graph renderLocalGraph(graphData, depth, fullScreen) idlink-graph>/div>div x-showshowFullGraph idfull-graph classshow styledisplay: none;>span idfull-graph-close x-on:clickfullGraph closefullGraph(fullGraph); showFullGraph false;>i icon-namex aria-hiddentrue>/i>/span>div idfull-graph-container>/div>/div>/div>div classtoc>div classtoc-title-container>div classtoc-title>On this page/div>/div>div classtoc-container>nav classtoc>ol>li>a href#20>前言--(20 岁生日)/a>/li>/ol>/nav>/div>/div>div classbacklinks>div classbacklink-title stylemargin: 4px 0 !important;>Pages mentioning this page/div>div classbacklink-list>div classbacklink-card>span classno-backlinks-message>No other pages mentions this page/span>/div>/div>/div>/div>/div>/aside>style>#tooltip-wrapper { background: var(--background-primary); padding: 1em; border-radius: 4px; overflow: hidden; position: fixed; width: 80%; max-width: 400px; height: auto; max-height: 300px; font-size: 0.8em; box-shadow: 0 5px 10px rgba(0,0,0,0.1); opacity: 0; transition: opacity 100ms; unicode-bidi: plaintext; overflow-y: scroll; z-index: 10;}#tooltip-wrapper:after { content: ; position: absolute; z-index: 1; bottom: 0; left: 0; pointer-events: none; width: 100%; unicode-bidi: plaintext; height: 75px;}/style>div styleopacity: 0; display: none; idtooltip-wrapper>div idtooltip-content>/div>/div>iframe styledisplay: none; height: 0; width: 0; idlink-preview-iframe src>/iframe>script typeb2aedcf1ca984f7a38d42961-text/javascript> var opacityTimeout; var contentTimeout; var transitionDurationMs 100; var iframe document.getElementById(link-preview-iframe) var tooltipWrapper document.getElementById(tooltip-wrapper) var tooltipContent document.getElementById(tooltip-content) var linkHistories {}; function hideTooltip() { opacityTimeout setTimeout(function () { tooltipWrapper.style.opacity 0; contentTimeout setTimeout(function () { tooltipContent.innerHTML ; tooltipWrapper.style.display none; }, transitionDurationMs + 1); }, transitionDurationMs) } function showTooltip(event) { var elem event.target; var elem_props elem.getClientRects()elem.getClientRects().length - 1; var top window.pageYOffset || document.documentElement.scrollTop; var url event.target.getAttribute(href); if (url.indexOf(http) -1 || url.indexOf(window.location.host) ! -1) { let contentURL url.split(#)0 if (!linkHistoriescontentURL) { iframe.src contentURL iframe.onload function () { tooltipContentHtml tooltipContentHtml + div stylefont-weight: bold; unicode-bidi: plaintext;> + iframe.contentWindow.document.querySelector(h1).innerHTML + /div> tooltipContentHtml + iframe.contentWindow.document.querySelector(.content).innerHTML tooltipContent.innerHTML tooltipContentHtml linkHistoriescontentURL tooltipContentHtml tooltipWrapper.style.display block; tooltipWrapper.scrollTop 0; setTimeout(function () { tooltipWrapper.style.opacity 1; if (url.indexOf(#) ! -1) { let id url.split(#)1; const focus tooltipWrapper.querySelector(`id${id}`); focus.classList.add(referred); console.log(focus); focus.scrollIntoView({behavior: smooth}, true) } else { tooltipWrapper.scroll(0, 0); } }, 1) } } else { tooltipContent.innerHTML linkHistoriescontentURL tooltipWrapper.style.display block; setTimeout(function () { tooltipWrapper.style.opacity 1; if (url.indexOf(#) ! -1) { let id url.split(#)1; const focus tooltipWrapper.querySelector(`id${id}`); focus.classList.add(referred); focus.scrollIntoView({behavior: smooth}, true) } else { tooltipWrapper.scroll(0, 0); } }, 1) } function getInnerWidth(elem) { var style window.getComputedStyle(elem); return elem.offsetWidth - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight) - parseFloat(style.borderLeft) - parseFloat(style.borderRight) - parseFloat(style.marginLeft) - parseFloat(style.marginRight); } tooltipWrapper.style.left elem_props.left - (tooltipWrapper.offsetWidth / 2) + (elem_props.width / 2) + px; if ((window.innerHeight - elem_props.top) (tooltipWrapper.offsetHeight)) { tooltipWrapper.style.top elem_props.top + top - tooltipWrapper.offsetHeight - 10 + px; } else if ((window.innerHeight - elem_props.top) > (tooltipWrapper.offsetHeight)) { tooltipWrapper.style.top elem_props.top + top + 35 + px; } if ((elem_props.left + (elem_props.width / 2)) (tooltipWrapper.offsetWidth / 2)) { tooltipWrapper.style.left 10px; } else if ((document.body.clientWidth - elem_props.left - (elem_props.width / 2)) (tooltipWrapper.offsetWidth / 2)) { tooltipWrapper.style.left document.body.clientWidth - tooltipWrapper.offsetWidth - 20 + px; } } } function setupListeners(linkElement) { linkElement.addEventListener(mouseleave, function (_event) { hideTooltip(); }); tooltipWrapper.addEventListener(mouseleave, function (_event) { hideTooltip(); }); linkElement.addEventListener(mouseenter, function (event) { clearTimeout(opacityTimeout); clearTimeout(contentTimeout); showTooltip(event); }); tooltipWrapper.addEventListener(mouseenter, function (event) { clearTimeout(opacityTimeout); clearTimeout(contentTimeout); }); } window.addEventListener(load, function(event) { document.querySelectorAll(.internal-link).forEach(setupListeners); document.querySelectorAll(.backlink-card a).forEach(setupListeners); });/script>script typeb2aedcf1ca984f7a38d42961-text/javascript>lucide.createIcons({ attrs: { class: svg-icon } });/script>script src/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js data-cf-settingsb2aedcf1ca984f7a38d42961-|49 defer>/script>/body>/html>
Subdomains
Date
Domain
IP
b.jjhh.xyz
2024-08-17
104.21.13.86
c.jjhh.xyz
2024-09-13
104.21.13.86
blog.jjhh.xyz
2024-09-14
172.67.132.165
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]