@loly-pop האם הורדתם את גרסת הIntelliJ IDEA Ultimate או את IntelliJ IDEA Community Edition?
אתם צריכים להוריד את מה שנמצא בקטע השני, (הכהה) שכתוב עליו "גרסת הקהילה"

@צדיק-תמים ראיתי, שלחתי לו הודעה היום בבוקר, והשארתי כעת גם issue,
מצורף התוכנה המדוברת,
ZerachExplorer_setop_1.3.0.exe (גיט)
https://github.com/abaye123/ZerachExplorer
מבוסס על https://github.com/tempous/LiteExplorer
בעתיד בעז"ה יהיה שינוי שם לקובץ והסרת כונן באופן בטוח
עדכון: מבדיקה נוספת שעשיתי כעת, זה עובד היטב בכל מחשב מלבד 2 המחשבים שעליהם אני כותב, (יש ביניהם סנכרון כלשהו, כך שזה מובן למה באג מור באחד משפיע גם על השני..), כך שהבעיה על פניו לא קשורה לתחום התכנות..
@dovid ניסיתי כבר לעשות את זה, שמרתי וזה עובד בדפדפן ובVSC היטב,
(אם זה יהיה רלוונטי אוכל לשלוח למי שצריך בפרטי לינק ישיר)
זה מקטע הקוד הרלוונטי
let INACTIVITY_TIMEOUT;
let INACTIVITY_TIMEOUT_LOGOUT;
let INACTIVITY_TIMEOUT_SHOW_BANNER_LOGIN;
let INACTIVITY_TIMER_LOGOUT;
let SLIDE_SHOW_TIMEOUT;
let IMAGE_DISPLAYED = false;
// zmani
let IS_SABBATH = false;
function resetAdDisplay(elementId) {
console.log('resetAdDisplay. IMAGE_DISPLAYED: ' + IMAGE_DISPLAYED);
clearTimeout(INACTIVITY_TIMEOUT);
clearTimeout(SLIDE_SHOW_TIMEOUT);
if (elementId !== 'bthLogoutBanner') {
//hideBannerConnectionUser();
}
INACTIVITY_TIMEOUT = setTimeout(function () {
if (!IMAGE_DISPLAYED && !IS_SABBATH) {
console.log('displayAds: start');
displayAds();
IMAGE_DISPLAYED = true;
//logout();
}
}, 40000);
}
let currentImageIndex = 0;
const images = [
'resources/v322.jpg',
'resources/ad.jpg',
];
function displayAds() {
let adsContainer = document.createElement('div');
adsContainer.id = 'ads-div';
adsContainer.style.position = 'fixed';
adsContainer.style.top = '0';
adsContainer.style.left = '0';
adsContainer.style.width = '100%';
adsContainer.style.height = '100%';
adsContainer.style.zIndex = '1900';
adsContainer.style.display = 'flex';
adsContainer.style.flexDirection = 'column';
adsContainer.style.alignItems = 'center';
adsContainer.style.justifyContent = 'center';
let adsContent = document.createElement('div');
adsContent.id = 'ads-content';
adsContent.style.position = 'fixed';
adsContent.style.top = '0';
adsContent.style.left = '0';
adsContent.style.right = '0';
adsContent.style.width = '100%';
adsContent.style.height = '100%';
adsContent.style.maxWidth = '690px';
adsContent.style.margin = 'auto';
adsContent.style.zIndex = '1900';
adsContent.style.display = 'flex';
adsContent.style.flexDirection = 'column';
adsContent.style.alignItems = 'center';
adsContent.style.justifyContent = 'center';
let currentImage = document.createElement('img');
currentImage.src = images[currentImageIndex];
currentImage.style.width = '100%';
currentImage.style.height = '100%';
currentImage.addEventListener('click', hideAds);
let prevButton = document.createElement('button');
prevButton.textContent = '❮';
prevButton.onclick = displayPrevImage;
let nextButton = document.createElement('button');
nextButton.textContent = '❯';
nextButton.onclick = displayNextImage;
prevButton.style.position = 'absolute';
prevButton.style.top = '50%';
prevButton.style.width = '50px';
prevButton.style.height = '50px';
prevButton.style.transform = 'translateY(-50%)';
prevButton.style.right = '18px';
prevButton.style.backgroundColor = 'rgba(255, 255, 255, 0.5)';
prevButton.style.border = 'none';
prevButton.style.borderRadius = '50%';
prevButton.style.color = 'rgba(0, 0, 0, 0.8)';
prevButton.style.fontSize = '28px';
prevButton.style.cursor = 'pointer';
nextButton.style.position = 'absolute';
nextButton.style.top = '50%';
nextButton.style.width = '50px';
nextButton.style.height = '50px';
nextButton.style.transform = 'translateY(-50%)';
nextButton.style.left = '10px';
nextButton.style.backgroundColor = 'rgba(255, 255, 255, 0.5)';
nextButton.style.border = 'none';
nextButton.style.borderRadius = '50%';
nextButton.style.color = 'rgba(0, 0, 0, 0.8)';
nextButton.style.fontSize = '28px';
nextButton.style.cursor = 'pointer';
adsContent.appendChild(currentImage);
adsContent.appendChild(prevButton);
adsContent.appendChild(nextButton);
adsContainer.appendChild(adsContent);
document.body.appendChild(adsContainer);
console.log('displayFullScreenImage');
SLIDE_SHOW_TIMEOUT = setInterval(displayNextImage, 22000);
}
function displayNextImage() {
currentImageIndex = (currentImageIndex + 1) % images.length;
updateImage();
console.log('displayNextImage');
}
function displayPrevImage() {
currentImageIndex = (currentImageIndex - 1 + images.length) % images.length;
updateImage();
console.log('displayPrevImage');
}
function updateImage() {
let currentImage = document.querySelector('#ads-div #ads-content img');
currentImage.src = images[currentImageIndex];
clearInterval(SLIDE_SHOW_TIMEOUT);
SLIDE_SHOW_TIMEOUT = setInterval(displayNextImage, 22000);
}
function hideAds() {
console.log('hideFullScreenImage');
const adsContainer = document.getElementById('ads-div');
if (adsContainer) {
adsContainer.remove();
IMAGE_DISPLAYED = false;
resetAdDisplay('elementId');
}
}
document.addEventListener('mousedown', function (event) {
resetAdDisplay(event.target.id);
});
document.addEventListener('keypress', function (event) {
resetAdDisplay(event.target.id);
});
document.addEventListener('touchstart', function (event) {
resetAdDisplay(event.target.id);
});
resetAdDisplay('elementId');
יש לי סקריפט js שיוצר אלמנט div על כל המסך שמציג תמונות מתחלפות עם כפתורי קדימה/אחורה, האלמנט הלז נוצר לאחר כ40 שניות שלא בוצעה לחיצה במסך, ובVSC עם live server זה פועל מצויין, וכן (אותו קוד בדיוק, גירסה ישנה יותר של האתר עצמו, ללא שינויים שמשפיעים) במקום אחר בשרת.
אבל כשאני מרים את הקוד משרת express חדש, הפונקציה רצה כרגיל, כולל ההדפסות לקונסול, והאלמנטים נוצרים כרגיל, התמונות נמשכות מהשרת ומתחלפות (רישום בקונסול), אבל הכל, ללא שעל המסך ניכר משהו מלבד העובדה שקליקים לא עובדים בגלל שכבת העל של הdiv ש"מסתירה" (בשקוף, כי התמונה לא מוצגת) את שאר התוכן,
למישהו יש רעיון?
אני משתמש בקוד הבא כדי לייצא למשתמש את תוכן טבלה בדף למסמך csv, אבל תווים עבריים מוצגים באקסל כג'יבריש, ניסיתי לקודד כANSI (או Windows-1255), אבל זה עדיין יורד כUTF-8 ומוצג כג'יבריש
פתרונים? הפונקציה צריכה לרוץ בצד הלקוח, ועדיף ללא ספריות וכו'.
function exportToCSV() {
let csvContent = "data:text/csv;charset=ANSI,";
const rows = document.querySelectorAll('#table-report-sales tr');
rows.forEach(row => {
const rowData = [];
row.querySelectorAll('th, td').forEach(cell => {
rowData.push(`"${cell.textContent}"`);
});
csvContent += rowData.join(',') + '\n';
});
//const encodedUri = encodeURI(csvContent);
const encodedUri = encodeURI(`data:text/csv;charset=ANSI,${csvContent}`);
const link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "sales_report.csv");
document.body.appendChild(link);
link.click();
}
@mekev העברה לתיבת אימייל אחרת? כי אני אוכל כנראה לכתוב לך קוד קטן לגוגל סקריפט שמעביר מיילים מכתובות/תווית מסוימת, לכתובת אחרת, כהודעה הודעה, ומכניס מספר רנדומלי (או שעה למשל) בנושא כך שזה לא יקובץ ביחד..
@mekev אני כעת לא מצליח למצוא את זה בהגדרות הניתוב, עשיתי משהו בסגנון הזה אצלי בעבר, אבל אני כעת לא מוצא היכן זה היה..
@יעקב-מ-פינס תוכל גם לנתק בעצמך מהרשת ולהחזיר כדי לראות שזה אכן עובד..
אם אתה יודע איך מציצים בקונסול, תבדוק אם יש שם כעת שורה כזו:

זה אומר שהסקריפט אכן נטען לאתר, ושאין בעיה בהגדרה של הTampermonkey
@mekev על הצד הקלוש שאולי אתם משתמשים בגוגל וורקספייס עסקי, אז אפשרי להגדיר בניתוב אימייל שלכתובות מסוימות יתווסף משהו לנושא, אם רלוונטי אבדוק בדיוק כיצד לעשות את זה..
@יעקב-מ-פינס כעת הצלחתי, וזה עובד אצלי היטב (מקודם הTampermonkey פשוט היה מושבת..),
// ==UserScript==
// @name refresh kcm
// @namespace http://tampermonkey.net/
// @version 2024-05-15
// @description try to take over the world!
// @author You
// @match https://kcm.fm/*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// ==/UserScript==
(function() {
console.log('test...');
window.addEventListener('online', () => {
console.log('is online - refreshing...');
location.reload(true);
});
})();
@יעקב-מ-פינס
תנסה להזריק באמצעות תוספים כמו Tampermonkey משהו כזה, אני לא מביא סקריפט מוכן לTampermonkey כי אני לא ממש בקי בזה..
window.addEventListener('online', () => {
location.reload(true);
});
באופן אישי לי זה לא תמיד עובד במחשב (הקריאה לאירוע בעת ההתחברות מחדש, לא הריענון), אבל בטאבלט אנדרואיד זה עובד לי מעולה.
@עמית26 מניסיון לא אישי (ב"ה) אני ממליץ על עסקן על פני הדרן
אני חושב שיש להם אפליקצייה בשם Kosher Tube שהיא יוטיוב מסונן שלהם, ומלבד זה זה עונה לכל הדרישות שהצגת,
@צדיק-תמים אני מיישם בעיקרון את כל המגבלות בשני הצדדים, ולא זה העניין, העניין האמיתי הוא פשוט יותר, האפליקציה צריכה להיות בשימוש של בחורים, ולא בא לי (זה גם רמת החשיבות) לעשות למי שרוצה לשחק חיים קלים...
לא השתמשתי בקאפצ'ה, אני אכן אבדוק את זה בעז"ה.
תודה לכל העונים,
לא אכפת לי מאיסוף זוחל של הנתונים, ואני לא בשלב של חשש מבוטים (אני רוצה לחסום לפני זה שימוש שלא דרך הapp, ולא רק לבוטים, ככה שקאפצ'ה לא יעזור כאן לכאורה..) מצידי שכל משתמש יישמור את הנתונים שלו אצלו בגוגל דרייב ושיערב לו, מה שאני רוצה למנוע ממנו זה לקבל את הנתונים שלא דרך האפליקציה, כשהמטרה הסופית היא לא לאפשר לדוגמה למלאות טופס באמצעות שליחת קריאת api עם הפרמטרים הנצרכים..
באנלוגיה של בקשת GET, אני רוצה למנוע ממנו להדביק בדפדפן https://api.site.com/app/addlist?id=132&name=tamar ולהוסיף רשימה חדשה (שאז אפשר לשרשר רשימה משיטס לדוגמה וכן הלאה)..
(ללכוד את הקריאה כמו שהיא נשלחת זה יחסית קל, אבל להבין למה אותה בקשה פתאום כבר לא עובדת משום מה (כי יש טוקן זמני), ואז להסיק שזה איפשהו בקוד ולהתחיל לחפש בשביל זה צריך להיות עכבר קצת יותר רציני ..)
@איש-ימיני מה לבקש? זה לא יעזור לי פר לקוח כמו שכתבתי...
או שאתה מתכווין לשאול אותם כיצד ניתן למנוע את הטעינה באתר שלי? זה נראה לי יותר קשור לכאן מאשר אליהם..
אני כותב אפליקציה web שתהיה זמינה באופן ציבורי, ואני רוצה למנוע כמה שניתן את השימוש בapis - שנחשפים באפליקציה - שלא דרך האפליקציה, (היינו למנוע ממשתמש להדביק את הכתובת בדפדפן ולקבל את המידע..)
אז כרגע יישמתי את 2 הדברים הבאים:
אבל אני רוצה למנוע גישה גם ממישהו ש'השיג' את הבקשה המלאה ויש לו מפתח API (אחד הקליינטים..), ואני מחפש רעיונות כיצד לממש את זה..
אני חשבתי לעשות טוקן שנוצר בהתבסס על נתונים משתנים בקביעות לפי מוסכמות מסוימת, וככה בקשה שעבדה לפני 5 דקות כבר לא תעבוד שוב.. ואז חשבתי שזה מתחיל להיות דומה לp2p וא"כ אולי זה יותר טוב? (היינו שהטוקנים הללו ייוצרו בשרת)
אני לא יכול לעשות אימות לפי ip כי האפליקציה צריכה להיות נגישה מכל מקום, ואני גם יודע שאני לא יכול למנוע גישה לחלוטין, אבל אני מנסה לעשות קצת יותר מהרגיל..
.
כמובן שמלבד זה, הגישה לנתונים עצמם - היינו לא הנתונים הציבוריים של התוכנה, דורשת טוקן התחברות זמני של המשתמש וכל הקריאות מנוטרות למניעת נסיונות אקראיים למציאת הטוקן/מפתח המתאים.
יש לי אתר, שאני צריך למנוע בו את ההצגה של הכרטסת של נטפרי (לא יעזור ההגדרה בהגדרות אישיות, כי זה לכל משתמש בחיבור שלו..),
ניסיתי לשים פונקציה למחיקה מיד בתחילת הbody, אבל זה לא מונע את הטעינה של הכרטסת,
בינתיים שמתי טיים אאוט של 10 שניות מסיום טעינת הדף - כי לוקח לעיתים מס' שניות לכרטסת להיטען - שמפעיל את הפונציות הנ"ל, אבל אני מעדיף למנוע את הטעינה מראש.
<script>
function removeElementsById() {
const idsToRemove = [
'netfree-popup-window',
'netfree-popup-window-main',
'netfree-popup-window-hand-pull',
'netfree-popup-window-iframe'
];
idsToRemove.forEach((id) => {
const element = document.getElementById(id);
if (element) {
element.parentNode.removeChild(element);
}
});
}
function removeScriptsByUrl() {
const scriptUrlsToRemove = [
'https://netfree.link/card/card.js',
'https://netfree.link/api/card/data.js',
'https://netfree.link/injection-script/go-payment.js',
'https://netfree.link/injection-script/popup-card-init.js'
];
const scripts = document.querySelectorAll('script');
scripts.forEach((script) => {
const src = script.getAttribute('src');
if (scriptUrlsToRemove.includes(src)) {
script.parentNode.removeChild(script);
}
});
}
removeScriptsByUrl();
removeElementsById();
</script>