● מהדר אתרים

האתר שלך, בקוד

הזן קישור לאתר כדי לנסות לקבל את קוד המקור שלו. אם הגישה חסומה, המערכת תיצור תבנית שחזור משוערת על בסיס המידע הזמין, בלי להוריד קובצי מדיה.

🔗 כתובת האתר

הזן כתובת מלאה, כולל https://. תוצאות הניתוח תלויות בהרשאות ובמגבלות האתר המקורי.

💻 קוד האתר

0 תווים
🔍

ניסיון לקרוא את המקור

המערכת תנסה לקרוא HTML באמצעות הדפדפן. אתרים שאינם מאפשרים גישה כזאת עלולים לחסום את הבקשה.

🎨

שחזור משוער

כאשר אין גישה למקור, ניתן ליצור שלד עיצובי ולהשלים אותו לפי מידע זמין.

📄

קובץ יחיד

אפשר להעתיק את הקוד או להוריד את התוצאה כקובץ HTML יחיד.

`; } async function generateSite() { const url = validateUrl($("siteUrl").value.trim()); if (!url) { showStatus( "נא להזין כתובת תקינה, למשל https://example.com", "error" ); return; } generateBtn.disabled = true; generateBtn.textContent = "⏳ מנתח..."; showStatus("מנסה לקרוא את קוד המקור של האתר...", "info"); try { /* * ניסיון ישיר לקרוא את המקור. * הוא יצליח רק אם האתר מאפשר זאת דרך CORS. */ const response = await fetch(url.href, { method: "GET", mode: "cors", redirect: "follow", credentials: "omit" }); if (!response.ok) { throw new Error("האתר החזיר HTTP " + response.status); } const contentType = response.headers.get("content-type") || ""; if (!contentType.includes("text/html")) { throw new Error("הכתובת לא החזירה מסמך HTML"); } let html = await response.text(); /* * הסרת תגיות מדיה עצמאיות. * הפניות למשאבים שנותרו ב-CSS או ב-HTML עשויות להישאר. */ const doc = new DOMParser().parseFromString(html, "text/html"); doc.querySelectorAll( "img, video, audio, picture, source, canvas" ).forEach(element => element.remove()); if (!$("includeJs").checked) { doc.querySelectorAll("script").forEach(element => element.remove()); } if (!$("includeCss").checked) { doc.querySelectorAll('style, link[rel="stylesheet"]') .forEach(element => element.remove()); } if ($("responsive").checked) { const style = doc.createElement("style"); style.textContent = ` @media (max-width: 768px) { img, video, iframe { max-width: 100%; } body { overflow-wrap: anywhere; } }`; doc.head.appendChild(style); } html = "\n" + doc.documentElement.outerHTML; output.value = html; updateStats(); showStatus( "קוד המקור התקבל. בוצעו שינויים בסיסיים להסרת תגיות מדיה. " + "ייתכן שחלק מהעיצוב או מהפונקציות לא יפעלו מחוץ לאתר המקורי.", "success" ); } catch (error) { if ($("fallback").checked) { output.value = makeFallback(url); updateStats(); showStatus( "לא ניתן היה לקרוא את קוד המקור ישירות מהדפדפן. " + "נוצרה תבנית HTML משוערת, ולא שחזור שנגזר מניתוח מלא של האתר. " + "הסיבה עשויה להיות חסימת CORS, הגבלת גישה או שגיאת רשת. " + "פרטי השגיאה: " + error.message, "info" ); } else { showStatus( "לא ניתן לקרוא את קוד המקור: " + error.message, "error" ); } } finally { generateBtn.disabled = false; generateBtn.textContent = "⚡ צור קוד"; } } async function copyCode() { if (!output.value.trim()) { showStatus("אין קוד להעתקה.", "error"); return; } try { await navigator.clipboard.writeText(output.value); showStatus("הקוד הועתק בהצלחה!", "success"); } catch { output.focus(); output.select(); const success = document.execCommand("copy"); showStatus( success ? "הקוד הועתק בהצלחה!" : "לא ניתן להעתיק אוטומטית. סמן והעתק את הקוד ידנית.", success ? "success" : "error" ); } } function downloadCode() { if (!output.value.trim()) { showStatus("אין קוד להורדה.", "error"); return; } const blob = new Blob( [output.value], { type: "text/html;charset=utf-8" } ); const objectUrl = URL.createObjectURL(blob); const link = document.createElement("a"); link.href = objectUrl; link.download = "webclone.html"; document.body.appendChild(link); link.click(); link.remove(); setTimeout(() => URL.revokeObjectURL(objectUrl), 1000); showStatus("קובץ HTML הורד בהצלחה!", "success"); } function clearCode() { output.value = ""; updateStats(); showStatus("הקוד נוקה."); } $("siteUrl").addEventListener("keydown", event => { if (event.key === "Enter") { generateSite(); } });