событие не определено с функцией bind

Это действительно старый вопрос, который я видел много лет назад и сейчас пересматривал. После первого результата поиска Google ... Я отправлю свой ответ здесь.

Все решения, которые я нашел, чрезвычайно сложны и смешны. На протяжении многих лет я натыкался на решение, которое я не видел нигде, и до сих пор не разделял его.

Код очень прост ... По сути, мы пишем командный файл с именем / контуром исполняемого файла процесса, который вы хотите запустить, с любыми аргументами, которые вы хотите. Затем мы запускаем процесс explorer.exe с указанием пути к пакетному файлу ...

File.WriteAllText(@"C:\test.bat", @"C:\test.exe -randomArgs");

var proc = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "explorer.exe",
        Arguments = @"C:\test.bat",
        UseShellExecute = true,
        Verb = "runas",
        WindowStyle = ProcessWindowStyle.Hidden
    }
};
proc.Start();

Процесс проводника, который мы запускаем, немедленно уничтожается операционной системой, однако! Процесс запуска root explorer.exe запускает командный файл! Вы можете дать explorer.exe имя вашего исполняемого файла, и оно будет делать то же самое, однако этот метод не поддерживает аргументы.

Для всех, кого я знаю, это ошибка или недокументированная функция. Однако я не могу себе представить, как это можно использовать злонамеренно, поскольку это позволяет отменять права доступа ... Это работает в Windows 7/8 / 8.1 / 10.

0
задан LocV's Nest 27 February 2019 в 04:49
поделиться

2 ответа

Воспользуйтесь преимуществом закрытия:

createOnClickHandler(event) {
    return function onClick() {
         console.log(event);
    }
}

bind(event,action) {
    this.ref.addEventListener(event, createOnClickHandler(event));
}
0
ответ дан nico 27 February 2019 в 04:49
поделиться

Следующая демонстрация может связать несколько элементов с любым применимым событием и обратным вызовом.

Демо

Модифицированная версия кода, представленная в этой статье

class Binder {

  constructor(selector) {
    const elements = document.querySelectorAll(selector);
    this.length = elements.length;
    Object.assign(this, elements);
  }

  each(callback) {
    for (let node of Array.from(this)) {
      callback.call(node);
    }
    return this;
  }

  bind(event, callback) {
    return this.each(function() {
      this.addEventListener(event, callback, false);
    });
  }
};


const eH = selector => new Binder(selector);
const eL = element => new Binder(element);

let count = 0;

const clickCount = e => {
  const eTgt = e.currentTarget.children[0];
  count++;
  eTgt.textContent = count;
};

const colorRed = e => {
  e.target.style.color = 'red';
};

eH('.node').bind('click', clickCount);

eL('.tag').bind('click', colorRed);
[111 ]
<div class='node'><b>0</b></div>

<div class='tag'>TAG</div>

<div class='tag node'><b>TAG</b></div>

0
ответ дан zer00ne 27 February 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: