Hirdetés

2024. június 16., vasárnap

Gyorskeresés

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2014-02-25 10:20:57

LOGOUT.hu

JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)

Összefoglaló kinyitása ▼

Hozzászólások

(#2601) papa019 válasza Sk8erPeter (#2598) üzenetére


papa019
senior tag

Ha lekérni akarok adatokat a PHP-től a jQuery felé, akkor gondolom a get() fv-t kell használnom jQueryben, de hogyan tudok küldeni ennek a függvénynek adatok a php-ből?

(#2602) Sk8erPeter válasza papa019 (#2601) üzenetére


Sk8erPeter
nagyúr

Használhatod a sima $.ajax()-ot vagy a $.get()-et, meg a $.post()-ot is, attól függ, hogyan akarod küldeni az adatokat.
A dokumentációban nagyon jók a példák:
[link]
Itt egy lehetséges példa: [link].

Sk8erPeter

(#2603) Peter Kiss válasza Sk8erPeter (#2602) üzenetére


Peter Kiss
senior tag

Használja mindenki a $.ajax({})-ot, ezzel fog a leggyorsabban menni minden ($.get(), $.post() alatt ez bújik meg, nem kell a plusz kanyar). :)

(#2604) Sk8erPeter válasza Peter Kiss (#2603) üzenetére


Sk8erPeter
nagyúr

Ja, én is csak ezt használom, főleg, hogy a hibakezelés is jóval egyszerűbb vele.

Sk8erPeter

(#2605) Chrystall


Chrystall
senior tag

Sziasztok!

Saját magamnak csináltam nemrég egy honlapot, nem vagyok egy nagyon tapasztalt programozó, de egy HTML weboldalt össze tudtam hozni. Viszont van vele annyi gondom, hogy kéne egy részéhez Javascript, amit nem tudok megcsinálni, mert lövésem sincs az egész témárol.

Valamelyikőtök nem tudna segíteni. Egy egész egyszerű dologról lenne egyébként szó.

Adott több lapon is ez a kódrészlet:

<iframe src="https://viewer.zoho.com/embed.jsp?f=gIvdE" frameborder="0" width="680" height="600" style="margin-bottom:-70px; margin-top:-40px; "> </iframe>

Ezekben a Framekben a Zoho viewer jelenik meg, az az online dokumentum nézegető, de a fejlécet mindig eltüntetem a vastagon kiemelt margóbeállítással, mert nem néz ki jól, hogy minddig megjelenik a dokumentum fölött a filenév.

Tanakodtunk rajta a Google forumán, hogy emiatt adhat-e a Google rejtett tartalom miatti büntetést, azt monták nem valószínű, de biztosabb, ha írok egy szkriptet, ami utólag levágja a fejlécet. Bár nem tudom ez mért más, mintha beállítom a margó, hisz ugyan úgy akkor lesz egy rejtett tartalom, bár én nem vágom ezt a scriptezést...

Valaki be tudna ide másolni egy ilyen scriptet, gondolom ez nem egy bonyolult dolog, vagy ha senkinek nincs ideje rá, erre a fajta műveletre hol találok leírást? Hol van leírás arról a parancsról, ami nekem kelle a script-be, hogy eltünjön a framekben a fejléc? Tudtok segíteni?

(#2606) Sk8erPeter válasza Chrystall (#2605) üzenetére


Sk8erPeter
nagyúr

Csak kliensoldalon tudnád módosítani, valóban JavaScripttel, pl. jQuery-vel:
http://stackoverflow.com/questions/1796619/how-to-access-the-content-of-an-iframe-with-jquery

DE most gyorsan hozzáteszem, hogy amennyiben a Google miatt érdekel a dolog, akkor totálisan semmi értelme az egésznek, mivel a Google nem JavaScripttel ellátott böngészővel fogja vizslatni az oldalad FORRÁSKÓDJÁT... :N

Sk8erPeter

(#2607) Chrystall válasza Sk8erPeter (#2606) üzenetére


Chrystall
senior tag

Akkor ha büntetni akar a fejléc elrejtése miatt, kitilt a Java Scripttel is ugyanúgy, ezek szerint?

(#2608) Sk8erPeter válasza Chrystall (#2607) üzenetére


Sk8erPeter
nagyúr

ha a kódod úgy néz ki, hogy valami ilyesmi (nyilván lebutítva csak a példa kedvéért):
<!DOCTYPE html>
<html>
<head>
...................
</head>
<body>
...........
<div id="page">
..........................
<iframe src="...."></iframe>
...................
</div>
</body>
</html>

Akkor pontosan ezt fogja látni a Google robotja is, és nem számít, hogy itt JavaScripttel akár kivettél, akár beraktál elemeket.
Hogy az iframe-ért mennyire büntet, azt már teljesen másik topicba tartozik (SEO), de az tény, hogy ha az a szempont, hogy a forráskódért büntet-e a Google vagy sem, akkor annak a JavaScripthez semmi köze, jelenleg ugyanis a Google keresőrobotja lesz@rja a JavaScriptes módosításokat. Ezért is kell arra ügyelni, hogy a tartalmak jól megjelenjenek kikapcsolt JavaScript mellett is, amennyiben számít a keresőoptimalizálás.
A Google Webmaster Tools-ban van egy Fetch as Googlebot opció, ha ezt megnézed, úgy fogod látni az oldaladat, ahogy a Google keresőrobotja látja - látod a headereket és a nyers forráskódodat.

Egyébként ha van rá alternatíva, legjobb elkerülni az ilyen iframe-es beágyazást, és megoldani másképp (saját dinamikus tartalom generálásával, API felhasználásával, stb.).

Sk8erPeter

(#2609) [pod]Diablo


[pod]Diablo
őstag

Udv!

Van egy ilyen kod reszletem:

$('#username').click(function() {
$('#username').val('');
});

Lehetseges ezt valahogy ugy atalakitani hogy mondjuk fade effectel tunjon el a value?

Elore is koszonom a segitseget!

"Sült hal, Tom Jones, délutáni tea, rossz kaja, mégrosszabb idő, kibaszott Mary Poppins, LONDON!" // ...when i get sad.i stop being sad and be awesome instead...

(#2610) Sk8erPeter válasza [pod]Diablo (#2609) üzenetére


Sk8erPeter
nagyúr

Lehet, csináltam róla demót: [link]
Kelleni fog hozzá a jQuery UI is, itt is be van töltve.

Egyébként gyorsan hozzáteszem, hogy felhasználói szempontból szerintem nagyon idegesítő, ha eltűnik a szöveg egy ilyen szövegmezőben, hadd döntsem el én, hogy mikor akarom kitörölni, ne törlődjön automatikusan! Ez főleg egy felhasználói név begépelésére szolgáló szövegmezőben nem indokolt.

Sk8erPeter

(#2611) papa019 válasza Sk8erPeter (#2602) üzenetére


papa019
senior tag

Olyan kérdésem lenne hozzád/hozzátok, hogy hogyan tudom azt megvalósítani jQery+PHP kombóval, hogy a jQueryvel nem betöltök egy php-t, csak futtatok, és a php visszadob egy json, vagy xml pakkot?

Jelenleg úgy működik a programom, hogy ahol betölteném az adatbázisom adatait a klienssel, ott meghívom a php fájlt így:
$("#xyz").load('ajaxLoad.php');
Majd a php-ben az echo-val visszadobom a Javascriptet, amivel kirajzolom a területeket, de ez nem túl elegáns módszer.

Azt szeretném megcsinálni, hogy a php egy adatfájlt dobjon vissza és ezt feldolgoznám a JS-el.

(#2612) Karma válasza papa019 (#2611) üzenetére


Karma
félisten

A jQuery AJAX függvényei, közöttük a jQuery.get(), a jQuery.getJSON(), esetleg a jQuery.ajax() függvények lesznek segítségedre. (Az utolsó teljesen általános, az előbbi kettő ennek egyszerűbb wrapperei.)

Az elv pont az, ahogy írod, a PHP ilyen adatot dumpol ki, ezen függvények megfelelőjével indítasz egy XHR-t a háttérben, aztán a callback függvényben azt csinálsz a behozott adattal, ami jól esik.

[ Szerkesztve ]

“All nothings are not equal.”

(#2613) papa019 válasza Karma (#2612) üzenetére


papa019
senior tag

:R

(#2614) Sk8erPeter válasza papa019 (#2611) üzenetére


Sk8erPeter
nagyúr

Pedig korábban egy eléggé hasonlót kérdeztél itt. :)

Sk8erPeter

(#2615) papa019 válasza Sk8erPeter (#2614) üzenetére


papa019
senior tag

Nagyjából ez alapján csináltam meg egy részét, de azóta kiment a fejemből... :B
Rájöttem, hogy a php echoval visszaadott javascript kód nem éppen elegáns, pedig oly egyszerű lett volna. :DDD

(#2616) Sk8erPeter válasza papa019 (#2615) üzenetére


Sk8erPeter
nagyúr

Hát az valóban nem túl elegáns. :N
Remélem akkor így összejön (vagy már összejött).

Sk8erPeter

(#2617) Balázs1986


Balázs1986
addikt

Sziasztok!

Adott egy javascript program, amiben egy táblázat elemei között a billentyűzet nyilaival kellene közlekedni.
Chrome, Fox, IE9 alatt működik, de IE8 és az alatt sehogyan sem bírom életre keleni.
(Google találatok sem igazán segítettek ki :( )
window.onkeydown = function (e)
{
if(window.e)
{
nyomott=e.keyCode;
}

else
{
nyomott=e.which;
}

if (nyomott==39)
...

Próbáltam window helyett document-tel, de nem lett jobb a helyzet. Van ötletetek a helyes megoldásra?
Köszönöm előre is!

[ Szerkesztve ]

(#2618) Sk8erPeter válasza Balázs1986 (#2617) üzenetére


Sk8erPeter
nagyúr

(#2619) Balázs1986 válasza Sk8erPeter (#2618) üzenetére


Balázs1986
addikt

Sajnos nem működik a JS Bin kód sem, a which-el van baja, akárcsak az enyémnél (közben rájöttem, hogy amit fentebb másoltam, eleve nem lehetne jó :D )
"which értéke NULL vagy nem objektum" -ezt kapom, ha gombnyomás történik.

(#2620) Sk8erPeter válasza Balázs1986 (#2619) üzenetére


Sk8erPeter
nagyúr

Hát akkor valamit nagyon benéztél, ha a JSBines kód sem működik nálad. :D (neki érdekes módon ment, ahogy nálam is most is :) ) Gondolom nem olvastad el, amit abban a hozzászólásban írtam, hogy egyértelműsítsem a dolgot.

http://jsbin.com/axuzid/edit#preview
KATTINTS BELE abba a területbe, ahol a Hello World szöveg van...majd nyomogasd a kurzorbillentyűket (nyilakat).

Sk8erPeter

(#2621) Balázs1986 válasza Sk8erPeter (#2620) üzenetére


Balázs1986
addikt

De, olvastam, és nálam, IE9 alatt mennek is. Leírom, pontosan mi a helyzet :)
A szitu a következő:
Nálam megy a JSBin és a saját kód is, IE9, Chrome, Fox alatt egyaránt, nincs gond.
Közben ftp-zem fel egy tárhelyre, saját gép alatt virtuális gépen ellenőrzöm Xp alatti IE6-tal, és nem megy. Nem estem kétségbe, gondoltam biztos nálam a baj, ezért TeamViewerrel meglestem egy távoli gépen is, IE8 alatt. Ott nem megy sem a JSBin, sem a saját oldal (ami egyébként itt van) Más böngészőn virtuális és TW gép alatt jók.
Valamint, csak hogy biztos legyen a dolog, saját gépen megy a VirtualBox, benne egy XP, 6-os Explorerrel, és ott sem mennek.
Jelenleg ez a helyzet (ezúttal nem egy épp félig megírt kódrészt másolok :) ):

var ua = navigator.userAgent; /*global*/
var explorer = (ua.indexOf("MSIE")> -1) ? 1 : 0; /*global*/
document.onkeydown = function (e)
{
if(explorer)
{ alert("explorer");
nyomott=e.keyCode;
}
else
{ alert("nem explorer");
nyomott=e.which;

/*billentyűvizsgálat*/
}

Addig eljutok, hogy mind nálam, az IE9 alatt, mind a másik két gépen IE8 és IE6 alatt kiírja az adott böngésző, hogy "explorer", ellenben azonnal mögévágja, hogy "keyCode is NULL. Nem értem :(

[ Szerkesztve ]

(#2622) Sk8erPeter válasza Balázs1986 (#2621) üzenetére


Sk8erPeter
nagyúr

De itt mi a frásznak vizsgálgatsz user agentet? Tök felesleges.
Plusz talán nem IE6-ban kéne próbálgatni a JSBint... :N Nem olyan meglepő, ha abban a rakás fostalicskában nem működik úgy, ahogy kellene neki.

Na, de visszatérve. Eleve rossz gyakorlat mindent user agent vizsgálgatásától függővé tenni. Ha javasolhatom, erről még időben szokj le. :) A jó gyakorlat az, ha egy adott böngésző képességeit vizsgálgatod inkább, hogy milyen feature támogatott benne.
De erre a keycode-os problémára meg ott volt az egyszerű egysoros kód:
var keycode = (event.which) ? event.which : event.keyCode;
Ha épp a lenyomott karakterek kódjára vagy kíváncsi, ki nem sz@rja le, hogy az adott felhasználó Internet Explorert vagy épp Konquerort vagy valami tök mást használ-e.

Sk8erPeter

(#2623) Balázs1986 válasza Sk8erPeter (#2622) üzenetére


Balázs1986
addikt

Akkor már csak IE8 alatt tesztelem :)
Kipróbáltam az általad másolt kódot még akkor, amikor láttam a JSBint-ben...egész pontosan így nézett ki:
document.onkeydown=mozgat;
function mozgat(e)
{
var nyomott = (e.which) ? e.which : e.keyCode;
...
}

Így is jön a "which értéke NULL, vagy nem objektum" üzenet. Ami érdekes, mivel neki a which-el nem kellene foglalkozni, ha csak nem mindjárt a vizsgálandó értékkel van a baj.
Ezért próbaként változtattam így:
var nyomott = (e.keyCode) ? e.keyCode: e.which;
Ekkor pedig "keyCode értéke NULL, vagy nem objektum" jött...tehát arra gondolnék nem az ellenőrzésnél van a baj, hanem eleve nem is ad át az esemény karakterkódot :F
Ez létezhet? És mint írtam, a JSBint-nél is ezt csinálja. Most már komolyan nem tudom, hogy az IE8 a bugos, vagy a kódom. Még arra tudok gondolni, hogy valamiért nem jó helyen van a fókusz...de akkor meg miért csak IE8 alatt? :F
(Elnézést a sok szenvedésért, de tényleg nem tudom felfogni...)

[ Szerkesztve ]

(#2624) Balázs1986 válasza Sk8erPeter (#2622) üzenetére


Balázs1986
addikt

A useragent nem konkrétan ott és azért volt, hanem egy attachEvent / addEventListener miatt, még a kód első sorában, az init()-hez. Lehet, hogy ahhoz sem kellett volna, de méd nagyon kezdő vagyok :B De ha már ott volt, gondoltam azt használom...nem jött be :D
De a lényeg:
Megoldódott a probléma :)
document.onkeydown=mozgat;
function mozgat(e) {
var nyomott;
e = e || window.event;
nyomott = e.keyCode || e.which;
...
}

Ez a mocsok IE8 x-féle megoldás közül csak ezzel volt hajlandó mozgatni a kurzort...de lényeg, hogy most már megy.
Köszönöm a segítséget, azt meg főleg, hogy éjjel is :)

Bocsánat a dupláért!

[ Szerkesztve ]

(#2625) Sk8erPeter válasza Balázs1986 (#2624) üzenetére


Sk8erPeter
nagyúr

Hát basszus, igazad van, IE-ben nem is teszteltem. Tényleg a window.event a megoldás.
Itt van egy magyarázat, hogy miért is nem megy: [link]
"The problem is that e is undefined in IE because no event object is passed as a parameter to the event handler. You need the window.event property"

Mindig meglep, hogy micsoda egy szar ez az Internet Explorer, hogy mindent tök máshogy kezel, mint az összes többi normális böngésző... :U

Viszont ez, amit korábban szintén linkeltem, gond nélkül működik IE-ben is, mert a jQuery lekezeli az ilyen böngészőbeli hülyeségeket, így az IE-ben előforduló gány dolgokat is.

Ha már így dumáltunk róla, megcsináltam a JSBinen a javított változatot is:
http://jsbin.com/axuzid/3/edit#javascript,html,live
Ez IE8-ban már jól működik!

Plusz felraktam ide is:
[Checking arrow key codes with plain JavaScript]

Sk8erPeter

(#2626) spammer


spammer
veterán

Üdv! Nem tudom ez a megfelelő topik-e, de gondolom inkább ide illik:

Google Chrome böngésző eszköztárában lévő ikont szeretnék lecserélni sajátra. A bővítmény ikonja a gépen van tárolva az "Appdata" könyvtáron belül.....

A lényeg:

Ezt az a gépen tárolt ikont szeretném lecserélni egy weben tárolt ikonra egy script segítségével (userscriptként futna a Tampermonkey nevű kiegészítővel).

Viszont nem értek igazán a javascripthez, egy ilyen scriptet találtam, ami a weben levő képeket cseréli szépen (az működött is), de hiába írtam át az elérési utakat, nem működött, mert ez a script egy dokumentumot vizsgál és azon belül cseréli le a képet, nálam viszont ugye magáról a böngészőről van szó és egy saját gépen tárolt ikonról weben tároltra cseréléséről.

var ilist = document.images;
for(var i = 0; i < ilist.length; i++) {
if(ilist[I].src == "%LOCALAPPDATA%/Google/Chrome/User%20Data/Default/Extensions/extensionid/icons/icon-24.png") {
ilist(i).src = "http://valami.com/icon.png";
}
}

A %LOCALAPPDATA% csak egy rövidítés, először teljes,részletes eléri úttal próbáltam.

Tud valaki segíteni, hogy hogyan kellene módosítani ezt a scriptet, vagy hogyan nézne ki egy olyan, ami működne is? Nem tudom, hogy a Google Chrome, mint böngésző egyáltalán engedi-e magát userscripttel befolyásolni, szóval lehet, hogy nem is lehetséges, amit akarok. :U

[ Szerkesztve ]

„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."

(#2627) Jim-Y válasza spammer (#2626) üzenetére


Jim-Y
veterán

Szia, nem nagyon értem a kérdést, ugyanis ezeket az ikonokat nem lehet lecserélni tudtommal, csak ezeket.

Valamint a kiegészítő saját fejlesztés, vagy valamit letöltöttél?

(#2628) spammer válasza Jim-Y (#2627) üzenetére


spammer
veterán

Így van, a kiegészítők ikonjait szeretném lecserélni, nem a "gyári" böngésző ikonokat :) Manuálisan cserélhetők lennének, hogy ha kézzel bemásolom és felülírom a gépen tárolt ikonokat, de így amikor frissül egy kiegészítő, akkor megint csak visszaáll az eredetire, ezért lenne kényelmesebb egy script, ami mindig felülírja egy weben tárolt ikonnal :)

szerk: webstore-ból telepített kiegek, de ezeket mind kitömörítve tárolja a gépen appdata-n belül (lásd a kódban levő elérési út)

[ Szerkesztve ]

„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."

(#2629) Jim-Y válasza spammer (#2628) üzenetére


Jim-Y
veterán

Hát.. csinálhatnál egy kiegészítőt, ami a háttérben futna, és kommunikálna azokkal a kiegészítőkkel amiknek az ikonját le akarod cserélni, csak sajnos ehhez mindkét kiegészítőben mókolni kéne, szóval nem megoldás:/ Szerintem csak az marad, hogy a az appdata-ban cseréled mindig az ikont, max ezt lehetne automatizálni...de ebben valaki más fog segíteni neked úgy érzem, én max a kiegészítőkben tudnék :)

[ Szerkesztve ]

(#2630) spammer válasza Jim-Y (#2629) üzenetére


spammer
veterán

Hát, én annyira nem vágom a Chrome addon témát, de ha te igen, akkor írhatnál rá egy kieget :D Annyit kellene csinálnia, hogy a telepített addonokat beolvassa egy oldalra, megjeleníti a default_icon-jukat és ott meg lehetne adni egy url-t egy textfield mezőbe írva, hogy honnan töltse be az új ikont :) Gondolom seperc alatt megvan egy ilyen :DDD :N

Egyébként a Chrome ilyen szempontból eléggé fapad, mert a Firefox pl. simán userstyle-okkal szarrá moddolható... De ahogy látom, lehet, hogy a Chrome-nál nem is lehetséges ilyen mértékű beavatkozás, ha csak tényleg nem egy extension van rá írva, ami talán meg tudná ezt csinálni.

„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."

(#2631) Sk8erPeter válasza spammer (#2630) üzenetére


Sk8erPeter
nagyúr

Ez eléggé függ az extensiontől is, amiről szó van.
Pl. jópár extension van, ami kattintásra megváltoztatja az ikonját, olyan is van, ami inicializáláskor állít be egy tetszőleges ikont, sőt, olyan is lehet, ami bizonyos időközönként update-eli az ikon kinézetét (most épp nem arra gondolok, ami badge-et tesz rá, mint az elég hasznos Prohardver! Eszközök extension)
Van is egy sample extension is a kattintós ikonváltoztatásra a Google vonatkozó oldalán: [link]

Viszont ezzel a modulok default ikonjáról lehet infót kérni:
chrome.management >>> IconInfo

Azt nem próbáltam, lehet-e ilyen módon a default ikonokat cserélni...

=

"Egyébként a Chrome ilyen szempontból eléggé fapad, mert a Firefox pl. simán userstyle-okkal szarrá moddolható..."
Hát az nem fapadosság, ha biztonsági okokból nem engednek minden szarhoz hozzáférést... :U
"userstyle" alatt a user stylesheetet kell érteni? user stylesheettel tudod módosítani egy Firefox-extension ikonját? :F

[ Szerkesztve ]

Sk8erPeter

(#2632) Jim-Y válasza Sk8erPeter (#2631) üzenetére


Jim-Y
veterán

Rossz oldalon tapogatóztok, mert chrome kiegészítővel csak úgy lehetne megoldani a problémát, ha a kiegészítőben aminek az ikonját meg akarod változtatni felveszel egy listenert, amit a te saját magad által készített kiegészítődből meghívsz. Gondolom ilyenre nincs felkészítve egyik cél kiegészítő sem, tehát ez bukta. A google elég sok biztonsági megkötést tesz az ilyenekre. Persze ha a saját magad által készített kiegészítőt akarod dinamikusan változtatni ily módon, az easy go. De itt nem erről van szó :/

[ Szerkesztve ]

(#2633) Sk8erPeter válasza Jim-Y (#2632) üzenetére


Sk8erPeter
nagyúr

Megnézted egyáltalán, amit linkeltem? :D

"The chrome.management module provides ways to manage the list of extensions/apps that are installed and running."

Ilyen módon - amennyiben ebben a kiegészítőben, amit a változtatgatás céljára készítettél, a felhasználótól elkérted és megkaptad az engedélyt - akár még le is tilthatsz kiegészítőket.
Meg kapsz egyéb infókat is a többi kiegészítőről.
Az ikont mondjuk nem tudom, meg lehet-e változtatni, lehet, hogy arról csak infót kapsz.

Az ExtensionInfo objektumon belül:
icons ( optional array of IconInfo )
A list of icon information. Note that this just reflects what was declared in the manifest, and the actual image at that url may be larger or smaller than what was declared, so you might consider using explicit width and height attributes on img tags referencing these images. See the manifest documentation on icons for more details.

Sk8erPeter

(#2634) Jim-Y válasza Sk8erPeter (#2633) üzenetére


Jim-Y
veterán

Megnéztem, de 1: nem is arra reagáltam, 2: ez nem tudom, hogy jön ide, bár akkor lehet nem értem még mindig az alapproblémát, nem azt kéne megvalósítani, hogy ha mondjuk ő letölti a gmailes kiegészítőt webstore-ból, akkor ennek az ikonját kéne online tárhelyen lévő képre változtatni?

Egy kiegészítőben úgy lehet megváltoztatni az ikont, hogy:
chrome.browserAction.setIcon(object details)

de ezt csak magában a kiegészítőben tudod így kiadni, másik módszer az úgynevezett Message Passing amivel a kiegészítőd oldalai között tudsz kommunikálni, illetve esetünkben kiegészítők között is így lehet kommunikálni. Csakhogy ahhoz, hogy utasítást tudjunk kiadni arra, hogy a kiegészítő cserélje le az ikonját, kell a kódba egy ilyesmi sor:
chrome.extension.onRequestExternal.addListener(
function(request, sender, sendResponse) {
if (sender.id == blacklistedExtension)
return; // don't allow this extension access
else if(request.changeIcon)
chrome.browserAction.setIcon(icon);
sendResponse({targetData: "icon changed"});
else {
//dosomething
}
});

A saját kiegészítőből pedig az utasítás így nézne ki:

// The ID of the extension we want to talk to.
var laserExtensionId = "abcdefghijklmnoabcdefhijklmnoabc";
// Make a simple request:
chrome.extension.sendRequest(laserExtensionId, {changeIcon: true},
function(response) {
if (response.targetData == "icon changed")
//dosomething
});

(#2635) spammer válasza Sk8erPeter (#2631) üzenetére


spammer
veterán

Igen, saját kiegészítőnél lehet állítgatni mindenfélét, csak itt most azt lett volna a lényeg, hogy egy "külső" userscript avatkozzon be abba, hogy milyen ikont olvas be a böngésző az adott kiegészítőhöz. De ahogy utána guglizgattam, lehet, hogy ez így nem is megoldható, ugyanis egy manifest.json nevű fájlban tárolja az ikonok elérési útját, a fájl pedig csak olvasható a böngésző számára elvileg, tehát gondolom egy script sem tudja ezt így felülbírálni...

Próbálkoztam egy ilyennel is (ez a kieg elérési útja a böngésző számára):

// @match chrome-extension://ffmdedmghpoipeldijkdlcckdpempkdi/*

Aztán ez lett volna az új ikont "hívó" script:

chrome.browserAction.setIcon({path: 'http://imagerz.com/QEAUWUtvAwMHBVhPEQVQ'});

De ez így nem működik, lehet, hogy tényleg sötétben tapogatózok, mert lehet, hogy a Chrome biztonsági beállításai miatt nem is lehet ilyesmit megcsinálni külső userscript-tel.

--

Firefox téma: igen, nagyon sok kiegészítő ikonja simán stylish addonnal cserélhető, illetve szinte minden formázható Firefox-on belül ilyen módon (url bar, gombok, tab háttér és stb.). Biztonsági dolgokhoz ennek nincs köze, a FF kinézete gyakorlatilag CSS-ekkel formázható, van 1 millió userstyle hozzá. :)

--

szerk:

(#2634) Jim-Y: Igen, letöltök egy kieget, azt installálja a Chrome és azok a fájlok (így az ikonja is) a gépemen tárolódnak. Ezt kellene lecserélni egy online tárhelyre feltöltött ikonnal.

Csak az említett problémák miatt nem hiszem, hogy ez lehetséges.

[ Szerkesztve ]

„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."

(#2636) Jim-Y válasza spammer (#2635) üzenetére


Jim-Y
veterán

Szerintem inkább azt próbáld meg, hogy egy shell scripttel az appdatában lévő ikont cseréled ki az online tárhelyen lévővel, persze ugyanazon a néven, mivel a manifestben azt nem tudod átállítani..

(#2637) spammer válasza Jim-Y (#2636) üzenetére


spammer
veterán

Oké, nem annyira életbevágóan fontos dolog, csak azt hittem, megoldható userscripttel, mert így azért egyszerűbb lett volna :) Plusz ha ez így működne, akkor ebből kiegészítő is készíthető lett volna akár (talán). Na mindegy, azért köszi a segítséget mindkettőtöknek :R

„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."

(#2638) Sk8erPeter válasza spammer (#2635) üzenetére


Sk8erPeter
nagyúr

"Igen, saját kiegészítőnél lehet állítgatni mindenfélét"
Hát azért nem mindenfélét. Vannak szándékosan biztonsági korlátozások.
Most itt konkrétan az ikoncserére egy kiegészítős megoldást mutattam, userJS-sel teljesen biztos, hogy nem fogod tudni állítani. De annál normálisabb mókolás amúgy is egy saját kiegészítő használata, csak némi JavaScript-tudás kell hozzá. Egyébként Chrome-hoz nagyon jó a kiegészítős API, Operánál pl. kevésbé. Firefoxhoz nem készítettem még extensiont, de egyébként Te magad írtad, hogy ott is csak egy másik kiegészítő segítségével lehet felülbírálni a többi kiegészítő kinézetét. :) Mivel a Stylish is egy kiegészítő.

"Próbálkoztam egy ilyennel is (ez a kieg elérési útja a böngésző számára):
// @match chrome-extension://ffmdedmghpoipeldijkdlcckdpempkdi/"

Ez így ebben a formában teljesen esélytelen. Eleve sokkal normálisabb megoldás az, hogy a felhasználótól engedélyt kell kérni, hogy egyáltalán hozzáférhet-e az a kiegészítő a többi kiegészítő adataihoz.
De ahogy írod, ezek szerint magához a Firefox-felülethez lehet egy CSS-fájlt készíteni, amivel a megjelenő elemek kinézetét felülbírálod. Na ennek még nem néztem utána, és valszeg nem is fogok, mert ha tehetem, kerülöm a Firefoxot. :DDD

Amit én belinkeltem, az az extension API-nak az a része, aminek segítségével a többi kiegészítő adataihoz is hozzáférhetsz, de ahhoz saját extensiont kell megírni. Nem biztos, hogy olyan bonyolult, majd lehet, hogy holnap kipróbálom, mire is jó ez, lehet-e így változtatni az ikonokat, mondjuk sanszos, hogy nem.
Konkrétan milyen extensionöknek szeretnéd megváltoztatni az ikonját? Csak azért kérdezem, mert akkor kiderülne, azok egyáltalán hogyan működnek. Pl. ha kattintasz az extension ikonjára a toolbaron, akkor nem változik az ikonja?

Sk8erPeter

(#2639) Sk8erPeter válasza Jim-Y (#2634) üzenetére


Sk8erPeter
nagyúr

"ez nem tudom, hogy jön ide, bár akkor lehet nem értem még mindig az alapproblémát, nem azt kéne megvalósítani, hogy ha mondjuk ő letölti a gmailes kiegészítőt webstore-ból, akkor ennek az ikonját kéne online tárhelyen lévő képre változtatni?"
Én meg nem értem, mit nem értesz azon, hogy hogyan jön ide. :D
Hát épp az extensionökről kapsz adatot a chrome.management-en keresztül, így azok default ikonjáról is. Hogy változtatni is lehet-e ilyen módon, azt nem tudom, mert ez a része elég szegényes a Chrome-doksinak... :(
Értem én a példádat, és azt is, hogy a jobb megoldás valószínűleg tényleg a két extension közti kommunikáció, de én az adott helyzetre próbáltam kerülő utat találni - a chrome.management-en keresztül elérhető dolgokat nem próbáltam, így ezzel tapasztalatom még nincs. Na, de lehet, hogy holnap rászánom magam, már érdekel. :D

===

(#2636) : "shell scripttel" - vagy Windows esetén egy sima batch-fájllal, amit a gép indítására (vagy bizonyos időközökre) ütemez, azt' kész. Vagy ha frissül egy kiegészítő, akkor azt úgyis látja, és akkor ráküldi a batch-fájlt. :P

Sk8erPeter

(#2640) spammer válasza Sk8erPeter (#2638) üzenetére


spammer
veterán

Ha annyira profi lennék, akkor biztos írnék egy extension-t, de nem vagyok az :) Bár lehet, hogy extension-nel sem működne ez a dolog.

"Firefoxhoz nem készítettem még extensiont, de egyébként Te magad írtad, hogy ott is csak egy másik kiegészítő segítségével lehet felülbírálni a többi kiegészítő kinézetét. Mivel a Stylish is egy kiegészítő."

Igen, de a FF teljesen másképp épül fel, mint a Chrome, vagy nem is tudom, hogyan fogalmazzak :) Ott van egy alap motor, de a felület tulajdonságai CSS-sel formázhatók, és a Stylish kiegben gyakorlatilag CSS-ek tárolódnak, így CSS-sel formázható a FF felülete (így a kiegek dolgai is akár). Na ez Chrome-nál nem így van. Ezért gondoltam az Userscript megoldásra, hogy hátha az majd működik, de ebben a formában nem úgy tűnik.

Egészen konkrétan most a Bookmarks Menu ikonját akartam lecserélni, mert nem tetszik a sárga csillag :D De akármelyik más kiegről lehetne szó, amelyiknek statikus ikonja van, a dinamikus ikonos dolgokkal (pl. időjárásjelentő kieg) nem akarok variálni.

„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."

(#2641) Jim-Y válasza spammer (#2640) üzenetére


Jim-Y
veterán

[link]

Az ikont innen szedtem -> http://www.objektivek.com/images/favicons/prohardver.hu.png

Mivel kitömörítve tárolja a kiegészítőt a chrome, így bele tudtam írni :) Ezzel ugye az a gond, hogy nem tudom, hogy frissítésnél visszaáll-e, vagy sem, egyébként ennyit írtam a kódba:

chrome.browserAction.setIcon({path: "http://www.objektivek.com/images/favicons/prohardver.hu.png"});

[ Szerkesztve ]

(#2642) spammer válasza Jim-Y (#2641) üzenetére


spammer
veterán

Bizony, frissítésnél felül fogja írni. Ezt elkerülendő lett volna jó a userscript (esetleg extension) megoldás. :)

Persze ez is egy megoldás, meg a kézi ikoncsere is, csak nálam ott a kíváncsiság, hogy esetleg scripttel vagy extension-nel megoldható-e. Tehát hogy a probléma megoldható-e ily módon. Mert ha igen, akkor lehetne egy hasznos extension-t (vagy scriptet) írni Chrome-ra, mert ilyen még nincs.

[ Szerkesztve ]

„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."

(#2643) Jim-Y válasza spammer (#2642) üzenetére


Jim-Y
veterán

Kiegészítővel biztos nem lehet...mivel egyik kiegészítő a másikba csak úgy nem írhat..

(#2644) Sk8erPeter válasza Jim-Y (#2643) üzenetére


Sk8erPeter
nagyúr

Na, kipróbáltam, használtam a chrome.management API-t, és bár hozzá lehet nyúlni az extensionökhöz úgy, hogy ezen a kiegészítőn keresztül letiltod, de a default ikont sajnos nem lehet megváltoztatni.
Viszont egyébként tök jól ki lehet listázni az összes extensiont, applicationt is (ami a default új lapon látszik, ha jobbra lapoztok), keresgélni lehet köztük, stb., szóval ez egész hasznos.
A példaoldalon található App Launcher extensiont továbbfejlesztettem egy kicsit, és így különválasztva ki lehet listázni ezeket, meg lehet keresgélni, és ha az extensionre kattintasz, akkor feljön egy confirm ablak, hogy valóban le akarod-e tiltani az adott extensiont, ha leokézod, akkor le is tiltja. Így tehát a popup ablakban is meg lehet csinálni ezeket a műveleteket.
Ha gondoljátok, és érdekel Titeket ez az extension, akkor megosztom, szóljatok, ha kő'. :D

Egy szó, mint száz: sajnos a jogos gyanú beigazolódott, hogy extension ikonját megváltoztatni valóban csak egymásnak történő üzenetküldözgetésekkel lehet. :K
Gondolom így akarták elkerülni, hogy az extensionök túlságosan bele tudjanak kotorni egymás dolgaiba.

Sk8erPeter

(#2645) spammer válasza Sk8erPeter (#2644) üzenetére


spammer
veterán

Köszi a tesztelést! :R

Szerintem publikálhatod a cuccost, én meglesném valamikor :)

„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."

(#2646) [pod]Diablo


[pod]Diablo
őstag

Udv!

Egy olyan kerdesem lenne hogy hogy tudnam megvaltoztatni a bongeszo url-jet az oldal ujratoltese nelkul?Eloszor .load()-al beoltom egy fajl a tartalmat egy div-be,majd mikor rakattintok az egyik menuelemre, .show()-al elohozom a div-et,es tulajdonkepp azt akarnam elerni hogy mikor elohozom a div-et valtozzon meg az url pl http://www.oldalneve.hu/-rol http://www.oldalneve.hu/menuneve/-re.Remelem jo helyen tettem fel kerdes,es valammenyire erthetoen fogalmaztam.

Elore is koszonom a segitseget!

"Sült hal, Tom Jones, délutáni tea, rossz kaja, mégrosszabb idő, kibaszott Mary Poppins, LONDON!" // ...when i get sad.i stop being sad and be awesome instead...

(#2647) Balázs1986 válasza [pod]Diablo (#2646) üzenetére


Balázs1986
addikt

Szia!

Ha meg is lehet oldani, biztosan ezt szeretnéd? Ha jól értem, gyakorlatilag ugyanazon az oldalon maradnál, és egy nem létező url-t adnál meg. De ha ez van, akkor ha a user újratöltené az oldalt (enterrel legalábbis), hibát kap, mivel nem létezik a címsorban levő cím. A kedvencek közé rakásnál pedig megint csak ugyanez a macera van.
Ha nem jól értettem a kérdést, akkor elnézést :B

[ Szerkesztve ]

(#2648) fordfairlane válasza [pod]Diablo (#2646) üzenetére


fordfairlane
veterán

Egy olyan kerdesem lenne hogy hogy tudnam megvaltoztatni a bongeszo url-jet az oldal ujratoltese nelkul?

Tudomásom szerint csak az url fragment részét tudod megváltoztatni anélkül, hogy a böngésző újratöltse az oldalt.

Erről a részről van szó:

domain.com/action?param=value#resource

[ Szerkesztve ]

x gon' give it to ya

(#2649) [pod]Diablo válasza Balázs1986 (#2647) üzenetére


[pod]Diablo
őstag

Hat valami olyasmit szeretnek elerni hogy ha ramegyek egy menupontra,akkor legyen benne az url-be a menupontnak a neve valamilyen formaba,es ujratoltesnel,ugyen ezt a div-et hozza be,szoval tulajdonkepp ha beirjak pl hogy www.olda.hu/galery akkor a galery.php-nak a tartalmat toltse be a div-be.

"Sült hal, Tom Jones, délutáni tea, rossz kaja, mégrosszabb idő, kibaszott Mary Poppins, LONDON!" // ...when i get sad.i stop being sad and be awesome instead...

(#2650) Sk8erPeter válasza [pod]Diablo (#2649) üzenetére


Sk8erPeter
nagyúr

fordfairlane-nek nem reagáltál, pedig ő leírta az egész lényegét.
Ha nem akarsz újratöltést, akkor változtasd a hashmark utáni részt.
Ajánlom a jQuery hashchange event plugint.

Sk8erPeter

Copyright © 2000-2024 PROHARDVER Informatikai Kft.