Uncaught TypeError: e не является функцией функции JS для букмарклета - PullRequest
0 голосов
/ 09 января 2019

Я новичок в JS и букмарклетах.

Я модифицирую существующий код; который написан так (я упрощаю фактический код для образовательных целей):

  javascript: 1 && function(e) {
    var t = "";
    t += "<style>",
    t += ".somestyle-header{ background-color: #0171C5 !important }",
    t += "</style>",
    t += '<div class="somestyle-header">Test</div>',
    t += "";
    e("body").append("<div id='something'> </div>"), e("#something").append(t)
  }($myvariable);

Теперь это работает и создает DIV с именем "что-то" , а затем добавляет все в переменную "t" к этому. Другими словами, он добавляет все, что находится в переменной "t" , в HTML-код текущего сайта (учитывая, что на сайте установлено значение $ myvariable ).

Я пытаюсь сделать что-то подобное, но у меня есть следующие вопросы:

  1. Как я могу удалить это 1 в самом начале функции и заставить ее работать?
  2. Как я могу заставить его работать на каждой странице? Независимо от $ myvariable в конце, присутствует или нет.

Кроме того, если кто-то может объяснить, что делает эта 1 в самом начале и что $ myvariable в самом конце и почему этот код не работает, если я удаляю какую-либо из этих частей?

Я надеялся, что смогу сделать что-то вроде этого:

javascript: (function() {

  if (!($ = window.jQuery)) {
      script = document.createElement( 'script' );
      script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'; 
      script.onload=launchTheSplash;
      document.body.appendChild(script);
  } 
  else {
      launchTheSplash(e);
  }

  function launchTheSplash(e) {
    var t = "";
    t += "<style>",
    t += ".somestyle-header{ background-color: #0171C5 !important }",
    t += "</style>",
    t += '<div class="somestyle-header">Test</div>',
    t += "";
    e("body").append("<div id='something'> </div>"), e("#something").append(t)
  }
}());

Так что:

  1. Я проверяю наличие JQuery
  2. Я запускаю свой букмарклет независимо от существования переменной $ myvariable

Но мой код, похоже, не работает вообще, если я удаляю 1 в начале или переменную $ myvariable в конце. Если я это сделаю, я получу Uncaught TypeError: e не является функцией

Надеюсь, это достаточно ясно. Заранее спасибо!

Edit:

Я попробовал следующее предложение:

javascript: (function() {

  if (!($ = window.jQuery)) {
      script = document.createElement( 'script' );
      script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'; 
      script.onload=launchTheSplash();
      document.body.appendChild(script);
  } 
  else {
      launchTheSplash();
  }

  function launchTheSplash(e = $) {
      var t = "";
      t += "<style>",
      t += ".somestyle-header{ background-color: #011515 !important }",
      t += "</style>",
      t += '<div class="somestyle-header">Test</div>',
      t += "";
      e("body").append("<div id='something'> </div>"), e("#something").append(t);
    }
}());

Но, похоже, он не работает на определенных страницах; например, если я пытаюсь запустить букмарклет на веб-сайте www.apple.com, он возвращается с Uncaught TypeError: e не является функцией

Любые идеи приветствуются! Еще раз спасибо!

1 Ответ

0 голосов
/ 09 января 2019

Для немедленного выполнения функций вы можете использовать IIFE (https://developer.mozilla.org/en-US/docs/Glossary/IIFE).. Правильный синтаксис для немедленного выполнения функций -

(function(text){
  console.log(text);
})('Hello World')

В вашем случае e должен быть элементом jquery, поэтому всякий раз, когда вы вызываете функцию запуска, вы должны передать в нее $.

Посмотрите на этот фрагмент - https://jsitor.com/E8JW18YD-

...