• דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private
    • הרשמה
    • התחברות

    משהו יודע למה הדוחות נוכחות מגיעים כך?

    מתוזמן נעוץ נעול הועבר שאלות ועזרה הדדית
    18 פוסטים 5 כותבים 95 צפיות 3 עוקבים
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • תגובה כנושא
    התחברו כדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • ש מנותק
      ש''פ @נועם אלימלך
      נערך לאחרונה על ידי

      @נועם-אלימלך כתב במשהו יודע למה הדוחות נוכחות מגיעים כך?:

      תן את הקוד

      לא הבנתי

      נ תגובה 1 תגובה אחרונה תגובה ציטוט 0
      • נ מנותק
        נועם אלימלך @ש''פ
        נערך לאחרונה על ידי

        @ש-פ מה קוד

        ש תגובה 1 תגובה אחרונה תגובה ציטוט 0
        • ש מנותק
          ש''פ @נועם אלימלך
          נערך לאחרונה על ידי

          @נועם-אלימלך קוד של מה??

          תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • פ מנותק
            פישל @ש''פ
            נערך לאחרונה על ידי פישל

            @ש-פ מצורף קוד להזרקה בטמפרמאנקי
            בו ניתן גם לצפות ישירות מהמייל בקבצים וגם אפשרות להורדה כקובץ אקסל עם סיומת CSV

            // ==UserScript==
            // @name         Gmail HTML צפיה + הורדה (HTML / CSV)
            // @namespace    https://tampermonkey.net/
            // @version      2.8
            // @description  View HTML attachments inside Gmail + proper download system (FULL HEIGHT & NAME FIX)
            // @match        https://mail.google.com/*
            // @grant        none
            // ==/UserScript==
            
            (function() {
                'use strict';
            
                let currentHtmlContent = "";
                let currentFileName = "attachment";
            
                // טעינת ספריית FileSaver באופן דינמי לעקיפת הגבלות הדפדפן
                function loadFileSaver(callback) {
                    if (window.saveAs) {
                        callback();
                        return;
                    }
                    const script = document.createElement('script');
                    script.src = 'https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js';
                    script.fill = 'none';
                    script.onload = callback;
                    document.head.appendChild(script);
                }
            
                // =========================
                // כפתור תצוגה
                // =========================
                function createButton() {
                    const btn = document.createElement('button');
            
                    btn.innerHTML = `
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none"
                         style="margin-left:6px">
                      <path d="M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"
                            stroke="currentColor" stroke-width="2"/>
                      <path d="M14 3v6h6"
                            stroke="currentColor" stroke-width="2"/>
                    </svg>
                    <span>צפה ב-HTML</span>
                    `;
            
                    btn.style.cssText = `
                        margin-left:8px;
                        height:32px;
                        padding:0 14px;
                        border:1px solid #dadce0;
                        border-radius:16px;
                        background:#ffffff;
                        color:#3c4043;
                        font-size:13px;
                        font-weight:500;
                        font-family:Roboto, Arial, sans-serif;
                        cursor:pointer;
                        display:inline-flex;
                        align-items:center;
                        gap:4px;
                    `;
            
                    btn.onmouseenter = () => btn.style.background = '#f1f3f4';
                    btn.onmouseleave = () => btn.style.background = '#ffffff';
            
                    return btn;
                }
            
                // =========================
                // מנגנון הורדה מבוסס ספרייה חיצונית
                // =========================
                function forceDownload(content, filename, isCsv = false) {
                    // ניקוי ואימות שם הקובץ שלא יהיה ריק או מזהה מוזר מדי
                    let cleanName = filename.replace(/[\/\\?%*:|"<>\s]+/g, "_");
                    if (cleanName.length > 50 && !cleanName.includes('.')) {
                        cleanName = "html_attachment";
                    }
            
                    const finalName = cleanName + (isCsv ? ".csv" : ".html");
            
                    loadFileSaver(() => {
                        if (isCsv) {
                            const blob = new Blob(["\uFEFF" + content], { type: "text/csv;charset=utf-8" });
                            window.saveAs(blob, finalName);
                        } else {
                            const blob = new Blob([content], { type: "text/html;charset=utf-8" });
                            window.saveAs(blob, finalName);
                        }
                    });
                }
            
                // =========================
                // חלון תצוגה
                // =========================
                function showHtmlInModal(blobUrl) {
                    let overlay = document.getElementById('html-viewer-overlay');
            
                    if (!overlay) {
                        overlay = document.createElement('div');
                        overlay.id = 'html-viewer-overlay';
            
                        overlay.innerHTML = `
                            <div id="html-viewer-modal">
                                <div id="html-viewer-header">
                                    <span>תצוגת HTML</span>
            
                                    <div style="display:flex;gap:8px;">
                                        <button id="html-viewer-download">⬇ הורד</button>
                                        <button id="html-viewer-close">✕</button>
                                    </div>
                                </div>
                                <div id="html-viewer-body" style="flex:1; width:100%; height:100%; overflow:hidden;">
                                    <iframe id="html-viewer-frame"></iframe>
                                </div>
                            </div>
                        `;
            
                        overlay.style.cssText = `
                            position:fixed;
                            inset:0;
                            background:rgba(0,0,0,.45);
                            z-index:2147483647;
                            display:flex;
                            align-items:center;
                            justify-content:center;
                        `;
            
                        const modal = overlay.querySelector('#html-viewer-modal');
                        modal.style.cssText = `
                            width:90%;
                            height:90%;
                            background:#fff;
                            border-radius:12px;
                            overflow:hidden;
                            display:flex;
                            flex-direction:column;
                        `;
            
                        const header = overlay.querySelector('#html-viewer-header');
                        header.style.cssText = `
                            height:48px;
                            padding:0 16px;
                            display:flex;
                            align-items:center;
                            justify-content:space-between;
                            border-bottom:1px solid #e0e0e0;
                            font-family:Arial;
                            font-weight:500;
                        `;
            
                        // פונקציית סגירה מאוחדת
                        const closeModal = () => {
                            overlay.remove();
                            document.removeEventListener('keydown', handleEscKey);
                        };
            
                        overlay.querySelector('#html-viewer-close').onclick = closeModal;
            
                        overlay.onclick = e => {
                            if (e.target === overlay) closeModal();
                        };
            
                        // מאזין למקש ESC במקלדת
                        const handleEscKey = (e) => {
                            if (e.key === "Escape" || e.keyCode === 27) {
                                const downloadBox = document.getElementById('html-download-choice-box');
                                if (downloadBox) {
                                    downloadBox.remove();
                                } else {
                                    closeModal();
                                }
                            }
                        };
            
                        document.addEventListener('keydown', handleEscKey);
                        document.body.appendChild(overlay);
                    }
            
                    // 🔥 הגדרת גובה מלא קשיח של 100% ל-iframe כדי שלא ייחתך לעולם
                    const iframe = overlay.querySelector('#html-viewer-frame');
                    iframe.style.cssText = `
                        width:100%;
                        height:100%;
                        min-height: calc(100vh - 150px);
                        border:none;
                        display:block;
                    `;
                    iframe.src = blobUrl;
            
                    const downloadBtn = overlay.querySelector('#html-viewer-download');
            
                    // =========================
                    // תפריט בחירת הורדה (HTML / CSV)
                    // =========================
                    downloadBtn.onclick = () => {
                        if (document.getElementById('html-download-choice-box')) return;
            
                        const box = document.createElement("div");
                        box.id = 'html-download-choice-box';
            
                        box.style.cssText = `
                            position:fixed;
                            inset:0;
                            background:rgba(0,0,0,0.45);
                            z-index:2147483648;
                            display:flex;
                            align-items:center;
                            justify-content:center;
                            font-family:Arial;
                        `;
            
                        box.innerHTML = `
                            <div style="background:#fff;padding:18px;border-radius:12px;min-width:260px;text-align:center;">
                                <div style="margin-bottom:12px;font-weight:bold;">בחר סוג הורדה</div>
            
                                <button id="h" style="margin:5px;padding:8px 12px;cursor:pointer;">HTML</button>
                                <button id="c" style="margin:5px;padding:8px 12px;cursor:pointer;">CSV</button>
            
                                <div style="margin-top:10px;">
                                    <button id="x" style="cursor:pointer;">ביטול</button>
                                </div>
                            </div>
                        `;
            
                        document.body.appendChild(box);
            
                        const closeBox = () => box.remove();
                        box.querySelector("#x").onclick = closeBox;
            
                        box.querySelector("#h").onclick = () => {
                            forceDownload(currentHtmlContent, currentFileName, false);
                            closeBox();
                        };
            
                        box.querySelector("#c").onclick = () => {
                            const doc = new DOMParser().parseFromString(currentHtmlContent, "text/html");
            
                            const csv = [...doc.querySelectorAll("table tr")]
                                .map(tr =>
                                    [...tr.querySelectorAll("td,th")]
                                        .map(td => `"${td.innerText.trim()}"`)
                                        .join(",")
                                )
                                .join("\n");
            
                            forceDownload(csv, currentFileName, true);
                            closeBox();
                        };
                    };
                }
            
                // =========================
                // הוספת כפתורים בג'ימייל
                // =========================
                function addButtons() {
                    document.querySelectorAll('[download_url]').forEach(el => {
                        if (el.dataset.htmlViewerAdded) return;
            
                        const downloadUrl = el.getAttribute('download_url');
                        if (!downloadUrl) return;
            
                        const parts = downloadUrl.split(':');
                        let fileName = parts[1] || '';
            
                        if (!fileName.toLowerCase().match(/\.(html|htm)$/)) return;
            
                        el.dataset.htmlViewerAdded = "1";
            
                        const btn = createButton();
            
                        btn.onclick = async (e) => {
                            e.preventDefault();
                            e.stopPropagation();
            
                            const url = parts.slice(2).join(':');
            
                            const resp = await fetch(url, { credentials: 'include' });
                            const html = await resp.text();
            
                            currentHtmlContent = html;
            
                            // חילוץ שם קובץ נקי יותר אם הוא מגיע מגורם פנימי בג'ימייל
                            let extractedName = fileName.replace(/\.(html|htm)$/i, "");
                            if (extractedName.length > 40 && !extractedName.includes(' ')) {
                                // ניסיון לחפש כותרת אלטרנטיבית בתוך האלמנט של ג'ימייל
                                const titleEl = el.closest('.a6S')?.querySelector('.a1V, .aSx span');
                                if (titleEl && titleEl.innerText) {
                                    extractedName = titleEl.innerText.replace(/\.(html|htm)$/i, "");
                                }
                            }
                            currentFileName = extractedName;
            
                            const blob = new Blob([html], { type: "text/html" });
                            const blobUrl = URL.createObjectURL(blob);
            
                            showHtmlInModal(blobUrl);
                        };
            
                        el.appendChild(btn);
                    });
                }
            
                const observer = new MutationObserver(addButtons);
                observer.observe(document.body, { childList: true, subtree: true });
            
                addButtons();
            
            })();
            

            מצורף גם קובץ

            צפיה בקבצי HTML+הורדה בסיומת CSV.js

            מצורף תמונות בספויילר

            c73bbef8-d7a4-47b8-9c70-f0058e89660e-image.png

            386b5b8a-488b-471f-ad0a-cfad00b51e43-image.png

            cb8a9f0d-3ca9-4cab-b610-ad61b65664ed-image.png

            ספויילר

            מתענייןמ ש 2 תגובות תגובה אחרונה תגובה ציטוט 0
            • מתענייןמ מנותק
              מתעניין @פישל
              נערך לאחרונה על ידי

              @פישל איך זה אמור לעבוד?
              לא רואה שום שינוי?

              פ תגובה 1 תגובה אחרונה תגובה ציטוט 0
              • פ מנותק
                פישל @מתעניין
                נערך לאחרונה על ידי

                @מתעניין עשית ריענון לג'ימייל?
                אצלי עובד מצוין!

                תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • ש מנותק
                  ש''פ @פישל
                  נערך לאחרונה על ידי

                  @פישל לא הבנתי איפה להגדיר את זה

                  פ תגובה 1 תגובה אחרונה תגובה ציטוט 0
                  • פ מנותק
                    פישל @ש''פ
                    נערך לאחרונה על ידי

                    @ש-פ תתקין את התוסף הזה לכרום ואז תוריד את הקובץ המצורף ותייבא אותו לתוסף או פשוט תלחץ עליו והוא אוטומטי יעלה לתוסף

                    ש תגובה 1 תגובה אחרונה תגובה ציטוט 0
                    • ש מנותק
                      ש''פ @פישל
                      נערך לאחרונה על ידי

                      @פישל כתב במשהו יודע למה הדוחות נוכחות מגיעים כך?:

                      ואז תוריד את הקובץ המצורף ותייבא אותו לתוסף או פשוט תלחץ עליו והוא אוטומטי יעלה לתוסף

                      הקישור להורדה לא עובד.

                      פ תגובה 1 תגובה אחרונה תגובה ציטוט 0
                      • פ מנותק
                        פישל @ש''פ
                        נערך לאחרונה על ידי

                        @ש-פ אכן גוגל חוסמים הורדות של קבצים אלו
                        אבל פשוט תעתיק לתוסף ישירות.

                        תגובה 1 תגובה אחרונה תגובה ציטוט 0
                        • פוסט ראשון
                          פוסט אחרון