Egy external javascript meghívása nem lehetséges, miért?

tiburi képe

Sziasztok,

az egyik oldalba egy önálló felületű és megjelenésű search block-ot készülök betenni: ezt: http://tympanus.net/codrops/2013/06/26/expanding-search-bar-deconstructed/
CSS injectorral a stílusok mennek, két pici script feltöltve, amelyek a block-ból html-el meghívva tökéletesen mennek.

Az utolsó lépés az addEventListener és removeEventListener funkciók beüzemelése https://github.com/jonathantneal/EventListener, ami ez a script:

  1. // EventListener | @jon_neal | //github.com/jonathantneal/EventListener
  2. !window.addEventListener && window.Element && (function () {
  3. function addToPrototype(name, method) {
  4. Window.prototype[name] = HTMLDocument.prototype[name] = Element.prototype[name] = method;
  5. }
  6.  
  7. var registry = [];
  8.  
  9. addToPrototype("addEventListener", function (type, listener) {
  10. var target = this;
  11.  
  12. registry.unshift({
  13. __listener: function (event) {
  14. event.currentTarget = target;
  15. event.pageX = event.clientX + document.documentElement.scrollLeft;
  16. event.pageY = event.clientY + document.documentElement.scrollTop;
  17. event.preventDefault = function () { event.returnValue = false };
  18. event.relatedTarget = event.fromElement || null;
  19. event.stopPropagation = function () { event.cancelBubble = true };
  20. event.relatedTarget = event.fromElement || null;
  21. event.target = event.srcElement || target;
  22. event.timeStamp = +new Date;
  23.  
  24. listener.call(target, event);
  25. },
  26. listener: listener,
  27. target: target,
  28. type: type
  29. });
  30.  
  31. this.attachEvent("on" + type, registry[0].__listener);
  32. });
  33.  
  34. addToPrototype("removeEventListener", function (type, listener) {
  35. for (var index = 0, length = registry.length; index < length; ++index) {
  36. if (registry[index].target == this && registry[index].type == type && registry[index].listener == listener) {
  37. return this.detachEvent("on" + type, registry.splice(index, 1)[0].__listener);
  38. }
  39. }
  40. });
  41.  
  42. addToPrototype("dispatchEvent", function (eventObject) {
  43. try {
  44. return this.fireEvent("on" + eventObject.type, eventObject);
  45. } catch (error) {
  46. for (var index = 0, length = registry.length; index < length; ++index) {
  47. if (registry[index].target == this && registry[index].type == eventObject.type) {
  48. registry[index].call(this, eventObject);
  49. }
  50. }
  51. }
  52. });
  53. })();

Ha js-ként töltöm a szerverre és blokkból (a másik kettőhöz hasonlón) behivatkozom nem működik, ha settings.php-ból hívom meg, akkor sem ok.

drupal_add_js('utvonal/valami.js');

Ha azonban simán bemásolom a block-ba a scriptet, akkor ok, minden működik, a baj csak, hogy megjelenik a script nyers szövege is a legenerál oldalon, a szépen működő search block mellett.

Hogyan tudnám ezt a scriptet aktiválni, hogy jó legyen?

Köszönöm!

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
simont képe

Javascriptet a page.tpl.php-ben szoktam meghívni a header részben és működik:

<script type="text/javascript" src="/sites/all/themes/sajat_theme/js/sajat.js"></script>

Az van ilyen esetben, hogy minden oldalon meg lesz hívva a script.

0
-1

SimonT

ipeto képe

Vagy ugyanez működik a rögtön a smink .info fájljában is:
scripts[] = myscript.js

Butaság, storno...

2
0
pp képe

Ez miért is butaság?

0
0
ipeto képe

Azért gondoltam, mert eddig csak lokális js-fájloknál láttam/használtam ezt. De ezek szerint az első gondolatom volt a helyes :)

0
0
pp képe

Ezzel a megoldással a következő problémák lehetnek, annak ellenére, hogy szinte mindig működik.

  1. Ha alkönyvtárban van a Drupal, akkor természetesen ez a megadás nem jó. Szóval, ha több Drupalnak is felhasználod ezt a sminket, akkor más megoldás kell.
  2. Ha más könyvtárba kerül maga a smink a Drupalon belül. (pl. készítesz egy variánst)
  3. Ha már, akkor inkább a html.tpl.php-ba kéne belevarni, ha minden oldalon ott kell, hogy legyen, de ez lehet előny is, ha csak egy adott típusú oldalon kell, hogy ott legyen. (lásd suggestion rész a sminkelésnél)
  4. Hiába kapcsolod be a teljesítmény résznél a js fájlok egyesítése és tömörítése részt, nem fog működni. Erről a fájlról ugyanis a Drupal nem tud. Néha ez előny, ha mondjuk egy másik js fájlban hiba van, vagy e miatt nem működik a többi egyesített js. (De azért ekkor, ugye célszerűbb a hiba forrását megszüntetni, ahelyett, hogy elfednénk.)

A fentebb említett .info fájlban található scripts tömb a jó megoldás, mert az a fenti problémákat kiküszöböli. Részletesebben itt: Working with JavaScript and jQuery (vagy nálam a jövő héten induló sminkmester tanfolyamon :) )

4
0
tiburi képe

Köszönöm! Tökéletesen működik a .info :)

0
0