דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
יאנג בויי

יאנג בוי

@יאנג בוי
מדריכים
אודות
פוסטים
909
נושאים
40
שיתופים
0
קבוצות
2
עוקבים
16
עוקב אחרי
8

פוסטים

פוסטים אחרונים הגבוה ביותר שנוי במחלוקת

  • להורדה | תזכורת ספירת העומר QLYX
    יאנג בויי יאנג בוי

    @צחוק-עשה כתב בלהורדה | תזכורת ספירת העומר QLYX:

    הוא מראה לי את הקובץ עם 49 פריטים בלוח שנה ואז כשאני עושה שחזור הוא כותב סה"כ 0 פריטים וזה לא משחזר

    גם לי.
    נשמע גאוני בעיקרון...
    אשמח לקובץ שעובד.
    אני עם Q7

    סלולרי

  • בקשת מידע | הוספת רקעים לנוקיה 215/225
    יאנג בויי יאנג בוי

    @בסדבסד
    במידה וכן אשמח גם אני לקבל.
    YoungBoyForums@gmail.com

    עזרה הדדית - נוקיה

  • בקשת מידע | האם בעידן התקדמות הסוכני AI לתכנות נכון ללמוד תכנות?
    יאנג בויי יאנג בוי

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

    שוב, דעתי האישית והלא מבוססת.

    עזרה הדדית - מחשבים וטכנולוגיה

  • שיתוף | תוסף+ סקריפט לאזהרה לפני דיסלייק
    יאנג בויי יאנג בוי

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

    @שלמה-רביב אם כבר הוספת (ותודה על הקרדיט) אולי תעלה את זה כקישור קבוע ומתעדכן במידת הצורך?
    אז זה באמת יהיה פשוט יותר מהתקנת תוסף.

    באגים/הצעות ייעול

  • שיתוף | תוסף+ סקריפט לאזהרה לפני דיסלייק
    יאנג בויי יאנג בוי

    @חובבן-מקצועי
    https://mitmachim.top/post/898325
    ליצור סקריפט חדש, למחוק את התוכן ולהדביק את מה שהבאתי.

    באגים/הצעות ייעול

  • בקשה | מה רע בסקריפטים לtampermonkey?
    יאנג בויי יאנג בוי

    כתב בבקשה | מה רע בסקריפטים לtampermonkey?:

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

    זה המקום גם להזכיר את המדריך הנפלא של @פרוזי

    עזרה הדדית - JavaScript

  • בקשה | מה רע בסקריפטים לtampermonkey?
    יאנג בויי יאנג בוי

    @יאיר-דניאל כתב בבקשה | מה רע בסקריפטים לtampermonkey?:

    להוסיף כפתורים לדף האינטרנט - לא חלונית בחירה ומידע, אני צודק?

    לא.
    בחלונית של הטמפרמונקי - תחת הסקריפט הרלוונטי אפשר להוסיף כפתורים.
    לדוגמה עשיתי בסקריפט הזה.
    656770c5-1aab-4bd0-861d-b191fecf914a-image.png

    עזרה הדדית - JavaScript

  • בקשה | מה רע בסקריפטים לtampermonkey?
    יאנג בויי יאנג בוי
    1. את הרבה מהתוספים אפשר להפוך לסקריפט בבקשה אחת קטנה מהAI האהוב עליכם. (עשיתי את זה פה ופה.)
    2. במידה ומעלים את הסקריפט לקישור קבוע (למשל בגיטהאב) אפשר א' לעשות לו עדכונים אוטומטיים, וב' להתקין בכמה לחיצות פשוטות בלי להסתבך (אני אישית מוכן לעזור בפרטי למי שמסתבך עם יצירה של סקריפטים כקישור קבוע).
    3. גם בסקריפט טמפרמונקי אפשר להוסיף כפתורים, שוב - שאלו את הAI הקרוב למקום מגורכם. אפשר גם לראות באחת הדוגמאות שלי לעיל שהוא עשה את זה.
    עזרה הדדית - JavaScript

  • שיתוף | תוסף+ סקריפט לאזהרה לפני דיסלייק
    יאנג בויי יאנג בוי

    @שלמה-רביב
    הפכתי עם Gemini 3.1 Pro Preview לסקריפט טמפרמונקי:

    // ==UserScript==
    // @name         מתמחים טופ - אישור דיסלייק
    // @namespace    http://tampermonkey.net/
    // @version      1.0.0
    // @description  מוסיף חלון אישור לפני מתן דיסלייק באתר מתמחים טופ
    // @author       שלמה רביב וGemini 3.1 Pro Preview
    // @match        *://*.mitmachim.top/*
    // @match        *://mitmachim.top/*
    // @grant        none
    // @run-at       document-idle
    // ==/UserScript==
    
    (function () {
      "use strict";
    
      const DISLIKE_SELECTORS =[
        '[component="post/downvote"]',
        '[data-component="post/downvote"]',
        '[class*="downvote"]',
        '[class*="dislike"]',
        '[id*="dislike"]',
        'i.fa-thumbs-down',
      ];
      const SEL = DISLIKE_SELECTORS.join(", ");
    
      let _confirming = false;
      let _pendingTarget = null;
      let _dialog = null;
    
      function buildDialog() {
        if (_dialog) return;
    
        _dialog = document.createElement("dialog");
        _dialog.id = "mtop-dialog";
        _dialog.innerHTML = `
          <style>
            @import url('https://fonts.googleapis.com/css2?family=Heebo:wght@400;500;700&display=swap');
    
            #mtop-dialog {
              border: none;
              border-radius: 18px;
              padding: 36px 40px 32px;
              width: min(440px, 90vw);
              box-shadow: 0 24px 60px rgba(0,0,0,0.25);
              text-align: center;
              font-family: 'Heebo', Arial, sans-serif;
              direction: rtl;
            }
            #mtop-dialog::backdrop {
              background: rgba(10,15,30,0.55);
              backdrop-filter: blur(6px);
            }
            #mtop-icon {
              width: 68px; height: 68px;
              background: linear-gradient(135deg,#fff1f1,#ffd6d6);
              border-radius: 50%;
              display: flex; align-items: center; justify-content: center;
              margin: 0 auto 22px;
              color: #e53e3e;
              box-shadow: 0 0 0 8px rgba(229,62,62,0.08);
            }
            #mtop-dialog h2 { font-size:1.3rem; font-weight:700; color:#1a202c; margin:0 0 10px; }
            #mtop-dialog p  { font-size:1rem; color:#4a5568; margin:0 0 28px; }
            #mtop-btns { display:flex; gap:12px; justify-content:center; flex-direction:row-reverse; }
            #mtop-btns button {
              flex:1; max-width:180px; padding:13px 20px;
              border-radius:12px; font-size:0.95rem; font-weight:600;
              font-family:inherit; cursor:pointer; border:none; transition: background 0.15s, transform 0.12s;
            }
            #mtop-cancel  { background:#f0f4f8; color:#4a5568; }
            #mtop-cancel:hover { background:#e2e8f0; transform:translateY(-1px); }
            #mtop-confirm {
              background: linear-gradient(135deg,#e53e3e,#c53030);
              color: #fff;
              box-shadow: 0 4px 14px rgba(229,62,62,.35);
            }
            #mtop-confirm:hover { background: linear-gradient(135deg,#fc5c5c,#e53e3e); transform:translateY(-1px); }
    
            /* תמיכה במצב כהה */
            @media (prefers-color-scheme: dark) {
              #mtop-dialog { background:#1e2535; }
              #mtop-dialog h2 { color:#e2e8f0; }
              #mtop-dialog p { color:#94a3b8; }
              #mtop-cancel { background:#2d3748; color:#cbd5e0; }
              #mtop-cancel:hover { background:#4a5568; }
            }
          </style>
          <div id="mtop-icon">
            <svg width="36" height="36" viewBox="0 0 24 24" fill="none"
                 stroke="currentColor" stroke-width="2"
                 stroke-linecap="round" stroke-linejoin="round">
              <path d="M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3H10Z"/>
              <path d="M17 2h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17"/>
            </svg>
          </div>
          <h2>אישור דיסלייק</h2>
          <p>האם אתה בטוח שברצונך לתת דיסלייק?</p>
          <div id="mtop-btns">
            <button id="mtop-cancel">ביטול</button>
            <button id="mtop-confirm">כן, תן דיסלייק</button>
          </div>
        `;
    
        document.body.appendChild(_dialog);
    
        _dialog.querySelector("#mtop-confirm").addEventListener("click", () => {
          _dialog.close();
          if (_pendingTarget) {
            _confirming = true;
            _pendingTarget.click();
            setTimeout(() => { _confirming = false; }, 600);
          }
          _pendingTarget = null;
        });
    
        _dialog.querySelector("#mtop-cancel").addEventListener("click", () => {
          _dialog.close();
          _pendingTarget = null;
        });
      }
    
      // ============================================================
      // יירוט דיסלייק
      // ============================================================
      document.addEventListener("click", (e) => {
        if (_confirming) return;
        const el = e.target?.closest?.(SEL);
        if (!el) return;
    
        e.preventDefault();
        e.stopImmediatePropagation();
    
        _pendingTarget = el;
        buildDialog();
        _dialog.showModal();
      }, true);
    
      console.log("[מתמחים טופ] v5 dialog ✓ (Tampermonkey Version)");
    })();
    
    באגים/הצעות ייעול

  • בקשת מידע | בירור פרויקט חול המועד בקשת רעיונות
    יאנג בויי יאנג בוי

    @חד-גדיא
    הלוואי.
    למיטב ידיעתי אין גישה חינמית לAPI של גוגל צ'אט.

    כללי - עזרה הדדית

  • שיתוף | SmartBlock PRO| תוסף לחסימת פרסומות מוחלטת באתרי חדשות כולל פרוג.
    יאנג בויי יאנג בוי

    @פראירי
    שמים קישור קבוע שבו תהיה תמיד הגירסה העדכנית של הסקריפט (לי גיטהאב הכי נוח).
    ואז שמים את הקישור בשורות הראשונות בצורה הבאה (הדוגמה מתוך הסקריפט הזה שלי):

    // @updateURL    https://github.com/The-Young-boy/nodebb-dashboard/raw/refs/heads/main/nodebb-dashboard.user.js
    // @downloadURL  https://github.com/The-Young-boy/nodebb-dashboard/raw/refs/heads/main/nodebb-dashboard.user.js
    

    בשתי השורות את אותו קישור.

    ואז בכל פעם שיש גירסה חדשה מעלים את מספר הגירסה בשורת הגירסה:

    // @version      0.3.4
    

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


    ההתחלה המלאה של הסקריפט הנ"ל:

    // ==UserScript==
    // @name         NodeBB Dashboard Integrated - FULL & SECURED
    // @namespace    http://tampermonkey.net/
    // @version      0.3.4
    // @description  מערכת ניהול פורומים: הזרקה לתפריט, דשבורד מרכז (תיקון Bootstrap + הגנת XSS מלאה)
    // @author       Gemini 3 Pro Preview (Security Patch)
    // @match        *://*/*
    // @updateURL    https://github.com/The-Young-boy/nodebb-dashboard/raw/refs/heads/main/nodebb-dashboard.user.js
    // @downloadURL  https://github.com/The-Young-boy/nodebb-dashboard/raw/refs/heads/main/nodebb-dashboard.user.js
    // @grant        GM_xmlhttpRequest
    // @grant        GM_setValue
    // @grant        GM_getValue
    // @grant        GM_addStyle
    // @grant        unsafeWindow
    // @connect      icons.duckduckgo.com
    // @connect      cdn-icons-png.flaticon.com
    // @connect      *
    // @run-at       document-idle
    // ==/UserScript==
    

    כללי - עזרה הדדית

  • שיתוף | SmartBlock PRO| תוסף לחסימת פרסומות מוחלטת באתרי חדשות כולל פרוג.
    יאנג בויי יאנג בוי

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

    כללי - עזרה הדדית

  • שיתוף | SmartBlock PRO| תוסף לחסימת פרסומות מוחלטת באתרי חדשות כולל פרוג.
    יאנג בויי יאנג בוי

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

    רשות הדיבור לג'מיני:

    מכיוון ש-Tampermonkey עובד קצת אחרת מתוסף כרום מלא (אין לו חלון קופץ Popup נפרד או קובץ Background שרץ ברקע כל הזמן), ביצעתי את ההתאמות הבאות:

    1. החלון הקופץ (Popup): הומר לתפריט הפעולות המובנה של Tampermonkey (יופיעו לך כפתורי הדלקה/כיבוי בלחיצה על הסמל של Tampermonkey).
    2. אחסון (Storage): במקום chrome.storage.local השתמשתי בפונקציות האחסון של סקריפטים GM_getValue ו-GM_setValue.
    3. תהליכי רקע (Background): מנגנון ה-Ping של ה-15 דקות הומר לבדיקה שמתבצעת בכל טעינת עמוד רלוונטי, ששולחת Ping רק אם חלפו 15 דקות מהפעם הקודמת.
    4. תקשורת (Fetch): הומר ל-GM_xmlhttpRequest כדי לעקוף בעיות CORS שעלולות לצוץ ללא ההרשאות המיוחדות של התוסף.
    5. גישה למשתני חלון: נוסף שימוש ב-unsafeWindow כדי שנוכל לגשת לנגני הווידאו (videojs, flowplayer) שנמצאים בהקשר של האתר המקורי.

    הנה הקוד המלא. פשוט צור סקריפט חדש ב-Tampermonkey והדבק את כל זה:

    // ==UserScript==
    // @name         SmartBlock PRO
    // @namespace    http://tampermonkey.net/
    // @version      1.2
    // @description  חסימת פרסומות ווידאו חכמה - גרסת Tampermonkey
    // @author       You
    // @match        *://*.prog.co.il/*
    // @match        *://*.moovitapp.com/*
    // @match        *://*.kore.co.il/*
    // @match        *://*.emess.co.il/*
    // @match        *://*.jdn.co.il/*
    // @run-at       document-start\
    // @grant        GM_getValue
    // @grant        GM_setValue
    // @grant        GM_registerMenuCommand
    // @grant        GM_xmlhttpRequest
    // @grant        unsafeWindow
    // @connect      next-js-chrome-exten-30q4.bolt.host
    // ==/UserScript==
    
    (function() {
        'use strict';
    
        const currentHost = window.location.hostname;
        const BASE_URL = 'https://next-js-chrome-exten-30q4.bolt.host';
        const API_URL = `${BASE_URL}/api/ad-config`;
        const PING_URL = `${BASE_URL}/api/ping`;
    
        // ==========================================
        // תפריט שליטה (במקום ה-Popup)
        // ==========================================
        const sitesConfig = {
            'prog': 'פרוג (Prog)',
            'moovit': 'מוביט (Moovit)',
            'kore': 'כל רגע (Kore)',
            'emess': 'קול חי (Emess)',
            'jdn': 'חדשות JDN'
        };
    
        // רישום כפתורים בתפריט של Tampermonkey
        Object.keys(sitesConfig).forEach(site => {
            const isEnabled = GM_getValue(site, true); // ברירת מחדל: פעיל
            const menuTitle = `${isEnabled ? '🟢' : '🔴'} חסימה: ${sitesConfig[site]}`;
            GM_registerMenuCommand(menuTitle, () => {
                GM_setValue(site, !isEnabled);
                location.reload(); // רענון הדף כדי להחיל שינויים
            });
        });
    
        // ==========================================
        // מנגנון Background - Ping Server
        // ==========================================
        function handleBackgroundTasks() {
            let clientId = GM_getValue('clientId', null);
            if (!clientId) {
                clientId = 'user_' + Math.random().toString(36).substr(2, 9);
                GM_setValue('clientId', clientId);
            }
    
            const lastPing = GM_getValue('lastPing', 0);
            const now = Date.now();
            
            // שליחת פינג אם עברו 15 דקות
            if (now - lastPing > 15 * 60 * 1000) {
                GM_xmlhttpRequest({
                    method: 'POST',
                    url: PING_URL,
                    headers: { 'Content-Type': 'application/json' },
                    data: JSON.stringify({ clientId: clientId, timestamp: now }),
                    onload: () => GM_setValue('lastPing', now),
                    onerror: (err) => console.log('SmartBlock: Ping failed', err)
                });
            }
        }
        handleBackgroundTasks();
    
        // ==========================================
        // תשתית פרסומות אישיות
        // ==========================================
        function injectMyAd() {
            if (document.getElementById('smartblock-custom-ad')) return;
            
            GM_xmlhttpRequest({
                method: 'GET',
                url: API_URL,
                onload: function(response) {
                    try {
                        const config = JSON.parse(response.responseText);
                        
                        if (!config || !config.enabled || !config.imageUrl) return;
    
                        const adContainer = document.createElement('div');
                        adContainer.id = 'smartblock-custom-ad';
                        
                        Object.assign(adContainer.style, {
                            position: 'fixed', zIndex: '999999', background: 'white',
                            boxShadow: '0 10px 25px rgba(0,0,0,0.15)', borderRadius: '12px',
                            border: '1px solid #e5e7eb', width: '300px', overflow: 'hidden',
                            transition: 'all 0.3s ease', fontFamily: 'system-ui, sans-serif', direction: 'rtl'
                        });
    
                        if (config.position === 'bottom-left') {
                            adContainer.style.bottom = '20px'; adContainer.style.left = '20px';
                        } else if (config.position === 'bottom-right') {
                            adContainer.style.bottom = '20px'; adContainer.style.right = '20px';
                        } else if (config.position === 'top-banner') {
                            Object.assign(adContainer.style, {
                                top: '0', left: '50%', transform: 'translateX(-50%)',
                                width: '100%', maxWidth: '728px', borderRadius: '0'
                            });
                        }
    
                        const closeBtn = document.createElement('div');
                        closeBtn.textContent = 'X';
                        Object.assign(closeBtn.style, {
                            position: 'absolute', top: '5px', right: '5px', cursor: 'pointer',
                            background: 'rgba(0,0,0,0.1)', width: '20px', height: '20px',
                            borderRadius: '50%', display: 'flex', alignItems: 'center',
                            justifyContent: 'center', fontSize: '12px', fontWeight: 'bold', color: '#666'
                        });
                        closeBtn.onclick = (e) => { e.preventDefault(); adContainer.remove(); };
                        adContainer.appendChild(closeBtn);
    
                        const adLink = document.createElement('a');
                        adLink.href = config.linkUrl || '#';
                        adLink.target = '_blank';
                        adLink.style.display = 'block';
    
                        const adImage = document.createElement('img');
                        adImage.src = config.imageUrl;
                        adImage.style.cssText = 'width: 100%; display: block; height: auto;';
                        
                        adLink.appendChild(adImage);
                        adContainer.appendChild(adLink);
    
                        if (document.body) document.body.appendChild(adContainer);
                        else window.addEventListener('DOMContentLoaded', () => document.body.appendChild(adContainer));
                        
                    } catch (e) {
                        console.log('SmartBlock: Ad parse failed.'); 
                    }
                }
            });
        }
    
        function runBlocker(siteName, blockLogic) {
            if (GM_getValue(siteName, true) !== false) {
                blockLogic();
                injectMyAd();
            }
        }
    
        // הפניה משתנים לחלון האמיתי כדי שיהיה אפשר לתפעל נגנים בסביבת האתר
        const uw = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window;
    
        // ==========================================
        // 1. חסימה לפרוג
        // ==========================================
        if (currentHost.includes('prog.co.il')) {
            runBlocker('prog', () => {
                const style = document.createElement('style');
                style.textContent = `
                    .samUnitWrapper, .samCodeUnit, .samItem, .samBannerUnit2, .samUnitContent,[data-xf-init="sam-unit"], [data-position*="post_below"],
                    .prog-classifieds-banner-container, ins.adsbygoogle, 
                    iframe[src*="googleads"], iframe[src*="doubleclick"],
                    div[data-widget-key*="ad_"] 
                    { display: none !important; height: 0 !important; margin: 0 !important; padding: 0 !important; visibility: hidden !important; }
    
                    article.message[data-author="פרוגבוט"], 
                    article.message:has(.username:contains("פרוגבוט")) 
                    { display: none !important; }
                `;
                document.documentElement.appendChild(style);
    
                const progObserver = new MutationObserver((mutations) => {
                    mutations.forEach((mutation) => {
                        mutation.addedNodes.forEach((node) => {
                            if (node.nodeType === 1) {
                                if (node.classList && node.classList.contains('overlay')) {
                                    if (node.querySelector('.samItem, iframe[src*="campaigns"]')) {
                                        const closeBtn = node.querySelector('.js-overlayClose');
                                        if (closeBtn) closeBtn.click(); else node.remove();
                                    }
                                }
                                if (node.tagName === 'ARTICLE' && node.classList.contains('message')) {
                                    if (node.innerText.includes('פרוגבוט')) {
                                        node.remove();
                                    }
                                }
                            }
                        });
                    });
                });
                
                const startProgObserver = () => {
                    if (document.body) {
                        document.querySelectorAll('article.message').forEach(post => {
                            if (post.innerText.includes('פרוגבוט')) post.remove();
                        });
                        progObserver.observe(document.body, { childList: true, subtree: true });
                    } else {
                        requestAnimationFrame(startProgObserver);
                    }
                };
                startProgObserver();
            });
        }
    
        // ==========================================
        // 2. חסימה למוביט
        // ==========================================
        else if (currentHost.includes('moovitapp.com')) {
            runBlocker('moovit', () => {
                const style = document.createElement('style');
                style.textContent = `mv-ad-wrapper.additional-ad-banner, mv-qr-code-banner { display: none !important; }`;
                document.documentElement.appendChild(style);
                function deepRemove(node) {
                    if (!node) return;
                    const walker = document.createTreeWalker(node, NodeFilter.SHOW_ELEMENT, null, false);
                    while (walker.nextNode()) {
                        const el = walker.currentNode;
                        const text = el.innerText || "";
                        if (text.includes("נוסעים ב") || text.includes("משלמים באפליקציה") || text.includes("הירשמו עכשיו")) {
                            if (el.offsetHeight < window.innerHeight / 2) el.remove();
                        }
                        if (el.shadowRoot) deepRemove(el.shadowRoot);
                    }
                }
                window.addEventListener('load', () => setInterval(() => deepRemove(document), 1000));
            });
        }
    
        // ==========================================
        // 3. חסימה לכל רגע / JDN / קול חי
        // ==========================================
        else if (currentHost.includes('kore.co.il') || currentHost.includes('jdn.co.il') || currentHost.includes('emess.co.il')) {
            let siteKey = currentHost.includes('jdn') ? 'jdn' : (currentHost.includes('emess') ? 'emess' : 'kore');
            runBlocker(siteKey, () => {
                const style = document.createElement('style');
                style.textContent = `[id^="div-gpt-ad"], .ad-slot, .jdn-ad, iframe[src*="ads"], .ad-manager-slot,
                    .maavaron, div.banner[role="banner"], #v-0-0, #v-0-1-0, div[id^="v-0-"],
                    aside iframe, aside div[id^="v-0-"],
                    div[ads="true"], .videoadplayer, .ultracap, .ucapc, .uc1,
                    div:has(> div > img[src*="clicka1.co.il"]), div:has(> div > a > img[src*="clicka1.co.il"]), 
                    div:has(> div > .ubtn), div:has(> div > iframe[src*="jobik.co.il"]),
                    #page > div.centered.gap_bottom > div > div > div > div:nth-child(1),
                    #page > div.centered.gap_bottom > div > div > div:has(> div:nth-child(1) > img),
                    div[style*="max-width: 1200px"]:has(img[src*="clicka1"]),
                    div[class^="gc"]:has(img),
                    figure:has(a > video), .article-content-inside a > video, a:has(video[autoplay])
                    { display: none !important; }
                `;
                document.documentElement.appendChild(style);
    
                if (currentHost.includes('jdn.co.il') || currentHost.includes('emess.co.il')) {
                    setInterval(() => {
                        const flowplayers = document.querySelectorAll('.flowplayer');
                        flowplayers.forEach(fpContainer => {
                            if (fpContainer.classList.contains('is-cva') || fpContainer.querySelector('.fv-cva-skip') || (fpContainer.querySelector('video') && fpContainer.querySelector('video').src.includes('video_ad'))) {
                                const nextVideoBtn = fpContainer.parentElement.querySelector('.fp-playlist-external a:nth-child(2)');
                                if (nextVideoBtn && !nextVideoBtn.classList.contains('is-active')) {
                                    nextVideoBtn.click();
                                } else {
                                    const api = uw.flowplayer && uw.flowplayer(fpContainer);
                                    if (api && api.next) api.next();
                                    else {
                                        const v = fpContainer.querySelector('video');
                                        if(v) { v.muted = true; if(v.duration) v.currentTime = v.duration; }
                                    }
                                }
                            }
                        });
                    }, 50);
    
                    const msObserver = new MutationObserver((mutations) => {
                        mutations.forEach((mutation) => {
                            mutation.addedNodes.forEach((node) => {
                                if (node.nodeType === 1) { 
                                    const adVideos = node.querySelectorAll ? node.querySelectorAll('.videoadplayer, div[ads="true"] video') :[];
                                    const selfAd = node.classList && node.classList.contains('videoadplayer') ? [node] : [];
                                    const allAds = [...adVideos, ...selfAd];
                                    
                                    allAds.forEach(adVideo => {
                                        adVideo.muted = true;
                                        adVideo.style.display = 'none'; 
                                        adVideo.dispatchEvent(new Event('ended', { bubbles: true }));
                                        if(typeof uw.stopAd === 'function') uw.stopAd();
                                        const skipBtn = document.querySelector('.skip-button');
                                        if (skipBtn) skipBtn.click();
                                    });
                                }
                            });
                        });
                    });
                    
                    const startMsObserver = () => {
                        if(document.documentElement) msObserver.observe(document.documentElement, { childList: true, subtree: true });
                        else requestAnimationFrame(startMsObserver);
                    };
                    startMsObserver();
                }
    
                function hackPlayer(player) {
                    if (player._adHackApplied) return;
                    player._adHackApplied = true;
                    player.ready(() => {
                        player.trigger('nopreroll'); 
                        if (player.ads && player.ads.settings) player.ads.settings.timeout = 1;
                    });
                    player.on('adstart', () => {
                        const originalVol = player.volume();
                        player.muted(true);
                        if (player.ads) {
                            if (player.ads.endLinearAdMode) player.ads.endLinearAdMode();
                            if (player.ads.skipLinearAdMode) player.ads.skipLinearAdMode();
                        }
                        player.trigger('adend');
                        player.trigger('adskip');
                        setTimeout(() => {
                            player.muted(false);
                            if (originalVol) player.volume(originalVol);
                            player.play(); 
                        }, 50);
                    });
                }
    
                setInterval(() => {
                    if (typeof uw.videojs !== 'undefined' && uw.videojs.getPlayers) {
                        const players = uw.videojs.getPlayers();
                        for (const key in players) hackPlayer(players[key]);
                    }
                }, 500);
            });
        }
    
    })();
    

    איך לשלוט בחסימות?

    מכיוון שאין "חלון קופץ" (Popup) בטמפרמונקי, הדרך לשלוט בחסימה (לכבות/להדליק את החסימה לאתר ספציפי) היא דרך התפריט:

    1. כנס לאחד האתרים עליהם הסקריפט עובד.
    2. לחץ על הסמל של Tampermonkey בשורת התוספים שלך.
    3. תראה שם רשימה של מתגים למשל: 🟢 חסימה: פרוג (Prog)
    4. לחיצה עליו תשנה אותו ל-🔴 (כבוי) ותרענן את העמוד מיידית כדי לבטל את החסימה.
    כללי - עזרה הדדית

  • בירור | תמונת פרופיל של כתובת מייל שנשלח משרת
    יאנג בויי יאנג בוי

    @ezerphone אני לא שמעתי.

    עזרה הדדית - מחשבים וטכנולוגיה

  • בירור | תמונת פרופיל של כתובת מייל שנשלח משרת
    יאנג בויי יאנג בוי

    אפשרי רק לפי כתובת ספציפית.
    מדריך.
    בהצלחה וחג שמח.

    עזרה הדדית - מחשבים וטכנולוגיה

  • שיתוף | RoseiteOS | מערכת לינוקס כשרה [גרסא ראשונית]
    יאנג בויי יאנג בוי

    הבדיקות יכולות להתבצע על מכונה וירטואלית ולא מחשב חי, נכון?

    עזרה הדדית - לינוקס

  • שיתוף | העיטורן- עכשיו באתר!!!!!
    יאנג בויי יאנג בוי

    הצעה לשיפור הגלריה:
    כפתורי הצבעה - לייק ודיסלייק (עדיף חיצים, יותר נקי ומתאים) ליד כל עיצוב בגלריה, ושהרשימה תמויין אוטומטית לפי כמות ההצבעות.
    עם אפשרות מיון גם לפי תאריך העלאה, שלא יתפספסו דברים טובים וחדשים.

    זה כמובן יפתור את זה:

    זה המקום לבקש לא להספים את הגלריה בשרבוטים (אני יכול למחוק אבל לא ממש יש לי זמן וכח)

    ולגבי זה:

    זה יחייב אותי לעשות מערכת חיבור לחשבון ואת המשתמש להתחבר בכדי למנוע הצבעות כפולות

    אפשר לעשות לפי IP, לא מושלם אבל עדיף מכלום.

    כללי - עזרה הדדית

  • שיתוף | נודביבי פלוס - כלים שימושיים לפורומי נודביבי!
    יאנג בויי יאנג בוי

    העליתי. בהצלחה.

    @לאצי ממליץ לך לבקש מהAI שלך לסכם לך את השינויים וההבדלים ולהטמיע רק אותם, כי יש מבנה קצת שונה בין הקוד שלי לשלך.
    ותעדכן כמובן כשאתה מסיים...

    עזרה הדדית - מחשבים וטכנולוגיה

  • שיתוף | קבלת 'נושאים שלא נקראו' מכלל הפורומים
    יאנג בויי יאנג בוי

    בוצע עדכון לסקריפט.
    העדכון כולל בעיקר שיפורי אבטחה, בזכותו ובעצותיו של @cfopuser שהצביע על הבעיות.
    לא בדקתי כל כך את כלל השינויים (הכוללים גם שינויי עיצוב וכו') ויתכנו שגיאות חדשות. בכל מקרה אני פתוח לPR בגיטהאב.

    אציין כי ניתן להשתמש בסקריפט כחלק מהחבילה שעשה @לאצי כאן.

    בעיקרון אמור להתעדכן אוטומטית, מי שלא יכול לעדכן ידנית מכאן.

    באגים/הצעות ייעול

  • שיתוף | נודביבי פלוס - כלים שימושיים לפורומי נודביבי!
    יאנג בויי יאנג בוי

    @המלאך כתב בשיתוף | נודביבי פלוס - כלים שימושיים לפורומי נודביבי!:

    זה שהבינה עשתה מזהים בקלות מהקוד מקור.. 😉

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

    @לאצי כתב בשיתוף | נודביבי פלוס - כלים שימושיים לפורומי נודביבי!:

    תודה שהצלת אותי...

    זה נורא נורא פשוט. החלפה של כל תגיות הHTML בפקודות המתקבלות.

    עזרה הדדית - מחשבים וטכנולוגיה
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר