Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Javascript problém

Se svými mizivými znalostmi programování jsem se pokusil dát si na stránky linky na Přidat k oblíbeným a Nastavit jako homepage. Zkombinoval jsem několik postupů, které jsem našel porůznu na webu. Nejdřív jsem definoval dvě funkce.
1) pro přidání k oblíbeným

function AddFavorite(linkObj,addUrl,addTitle) 
{ 
  if (document.all && !window.opera) 
  { 
    window.external.AddFavorite(addUrl,addTitle); 
    return false; 
  } 
  else if (window.opera && window.print) 
  { 
    linkObj.title = addTitle; 
    return true; 
  } 
  else if ((typeof window.sidebar == 'object') && (typeof window.sidebar.addPanel == 'function')) 
  { 
      window.sidebar.addPanel(addTitle,addUrl,''); 
      return false; 
  } 
}

2) pro nastavení jako výchozí stránka

function SetAsHomepage()
{
  if (document.all && !window.opera)
  {
  this.style.behavior='url(#default#homepage)'; this.setHomePage(document.location.href); return false;
  } else {
  window.alert('Váš prohlížeč nepodporuje automatické nastavení této funkce.');
  return false;
  }
}

Pak jsem přidal odkazy:

echo "<a href='#' title='Přidat k oblíbeným' rel='sidebar' onclick='return AddFavorite(this,document.location.href,document.title);'>Přidat k oblíbeným</a><br>
<a href='#' title='Nastavit jako výchozí' onclick='return SetAsHomepage();'>Nastavit jako výchozí</a>";

No, a co se stalo?
V Opeře funguje obojí.
Ve FF funguje obojí, ale okno pro schválení přidání do oblíbených se objeví DVAKRÁT.
V IE přidání k oblíbeným funguje, nastavení jako homepage ne.

Jak to opravit?

Díky.
Pridané formátovanie zdrojového kódu. (los)

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Ve FF funguje obojí, ale okno pro schválení přidání do oblíbených se objeví DVAKRÁT. Mne sa to tam…
los 25.07.2007 11:12
los
Božské! Chodí to! :-) Detekuji ten prohlížeč, protože mně vadí, když uživatel klikne a nic se nestan…
Drbo 25.07.2007 11:35
Drbo
Aha, pre pridanie do obľúbených by rel="sidebar" malo stačiť. Takže môžeš vyhodiť vo funkcii AddFavo…
los 25.07.2007 11:44
los
Na fórum czilla mi poradili úpravu podle http://developer.mozilla.org/cs/docs/Opravy_chyb_we bmaster…
Drbo 25.07.2007 18:13
Drbo
Čo presne si upravil v tých funkciách? Na tej stránke, podľa ktorej si to upravoval, píšu len to, ž…
los 25.07.2007 19:16
los
Já tomu vážně skoro vůbec nerozumím... :)) Nahradil jsem document.all za document.getElementById…
Drbo 25.07.2007 19:25
Drbo
No to by vysvetľovalo všeličo - napríklad to, že ten skript potom vo Firefoxe spadne a nevykoná sa v…
los 25.07.2007 19:50
los
Tohle chodí jen v Opeře, ve FF a IE ne... :-(
Drbo 25.07.2007 20:19
Drbo
Pardón - pre FF som poplietol poradie parametrov a v IE som teraz zistil, že test na window.external…
los 25.07.2007 20:46
los
Vůbec nevím o čem mluvíš... ::) Nicméně to mi nezabránilo, abych to nastavil tak, jak jsi řekl a voi…
Drbo 25.07.2007 21:08
Drbo
Mám dojem, že se los v php trochu vyzná (;-)), přesto bych ti doporučil založit na poradně nový přís…
host 25.07.2007 21:15
host
No tak já jsem zase jihoamerické zvíře (lama) ale zvířata by si měla pomáhat... :-) Spíš jde o to, ž…
Drbo 25.07.2007 21:20
Drbo
Na CMS je tady spousta odborníků (vím minimálně o jednom ]:)), ničeho se neboj a směle se ptej! ;-) poslední
host 25.07.2007 21:29
host

Ve FF funguje obojí, ale okno pro schválení přidání do oblíbených se objeví DVAKRÁT.

Mne sa to tam zjavilo raz. Máš tu stránku niekde prístupnú, kde sa to zobrazuje dvakrát?

V IE přidání k oblíbeným funguje, nastavení jako homepage ne.

Vo funkcii pre nastavenie homepage, používaš v IE kľúčové slovo this, pod ktorým ale nie je odkaz, na ktorý používateľ klikol. Môžeš to prepísať napr. takto (netestované):

function SetAsHomepage(link) {
  if (document.all && !window.opera) {
    link.style.behavior='url(#default#homepage)';
    link.setHomePage(document.location.href);
  } else
    alert('Váš prohlížeč nepodporuje automatické nastavení této funkce.');

  return false;
}

A potom v HTML:

onclick='return SetAsHomepage(this);'

Spravil by som to ešte trochu inak (bez detekcie prehliadača, pridávalo by sa to tam iba ak má používateľ zapnutý JavaScript, ...), ale keď to stačí takto...

Božské! Chodí to! :-)
Detekuji ten prohlížeč, protože mně vadí, když uživatel klikne a nic se nestane (ale nejsem programátor ani z rychlíku, spíš se jen logicky snažím poskládat co kde najdu metodou pokus-omyl, což je poměrně náročné na čas i na psychiku - takže nevím, jaký je běžný úzus)
Bylo by asi ideální udělat to tak, aby uživateli, který nemá javascript to napsalo, že ho musí mít (pokud se tak neděje automaticky, opět - netuším).

Zvláštní je to dvojí zobrazování u mého FF, k vidění je to na www.drbo.cz.

Díky za pomoc.

Aha, pre pridanie do obľúbených by rel="sidebar" malo stačiť. Takže môžeš vyhodiť vo funkcii AddFavorite tie dve vetvy určené pre prehliadače iné než IE.
edit: návratovou hodnotou z tej funkcie by malo vždy byť false.

edit2: čo som napísal, vlastne nie je úplne v poriadku... Zvláštne je, že keď som si stiahol tvoju stránku k sebe a stlačil pridanie do obľúbených, tak mi to okno vyskočilo len raz...

Já tomu vážně skoro vůbec nerozumím... :)) Nahradil jsem

document.all

za

document.getElementById

V každém případě to kupodivu funguje v případě "přidat k oblíbeným" - FF už to potvrzovací okno zobrazuje jen jednou a nefungovalo to v "nastavit jako výchozí", tam jsem musel ponechat ten původní tvar...

No to by vysvetľovalo všeličo - napríklad to, že ten skript potom vo Firefoxe spadne a nevykoná sa vetva pre Firefox. Takže to okno vyskočí len vďaka tomu rel=sidebar.

Vo Firefoxe to vyskočilo dvakrát, pretože to okno pre odkaz, ktorý ma nastavené rel=sidebar, sa zobrazí nezávisle na tom, čo vráti obslužná funkcia udalosti click (v Opere to funguje výnimočne normálne). Takže najlepšie bude asi zrušiť hodnotu atribútu rel v prípade, že prehliadač pozná funkciu na pridanie medzi obľúbené stránky:

function AddFavorite(link) {
  link.href = location.href;
  link.title = document.title;

  if (window.external && window.external.AddFavorite)
    window.external.AddFavorite(link.href, link.title);
  else if (window.sidebar && window.sidebar.addPanel)
    window.sidebar.addPanel(link.href, link.title, "");
  else
    return true;

  link.rel = null;
  return false;
}

A potom v HTML:

onclick='return AddFavorite(this);'

Pardón - pre FF som poplietol poradie parametrov a v IE som teraz zistil, že test na window.external.AddFavorite nevráti ani true a ani false, ale ticho spadne.

Takže druhý pokus, tentokrát som to aj vyskúšal:

function AddFavorite(link) {
  link.href = location.href;
  link.title = document.title;

  if (window.external && typeof window.external.AddFavorite != "undefined")
    window.external.AddFavorite(link.href, link.title);
  else if (window.sidebar && window.sidebar.addPanel)
    window.sidebar.addPanel(link.title, link.href, "");
  else
    return true;

  link.rel = null;
  return false;
}

Mám dojem, že se los v php trochu vyzná (;-)), přesto bych ti doporučil založit na poradně nový příspěvek a do něho uvést, co máš za problém? Určitě se najde někdo, kdo poradí (třeba zrovna severské zvíře) a řešení může pomoct i ostatním, kteří by narazili na stejný problém.

No tak já jsem zase jihoamerické zvíře (lama) ale zvířata by si měla pomáhat... :-) Spíš jde o to, že se jedná o velmi specifický problém úzce se dotýkající jednoho CMS... Nicméně vlákno založím a budu čekat na losa, eventuálně jiného zástupce fauny...

Zpět do poradny Odpovědět na původní otázku Nahoru