2017-02-21 3 views
2

Я работаю над расширением Chrome и в настоящее время пытаюсь заставить свой скрипт контента автоматически выполнять поиск с использованием формы на сайте. Я делаю это, изменяя значение ввода, а затем используя метод jQuery change(), так как сайт не начинает поиск иначе.Как заставить скрипт страницы распознать измененное вручную значение элемента INPUT?

var search = $("#videoSearchInput"); 
search.val("test"); 
search.change(); 

Я понял, что метод change() решает мою проблему, выполнив его с помощью консоли Chrome, но она не работает, когда я пытаюсь запустить его из моего скрипта содержимого. Я узнал, что если я изменю "scope"(?) моей консоли на мою расширение, а затем введите команду, она ничего не изменит.

Есть ли какое-то дополнительное разрешение, которое требуется этому методу?

И да, у меня есть jQuery, работающий в моем скрипте контента, так как я меняю значение ввода с помощью метода val().

Заранее благодарен!


EDIT: Может быть, я должен отметить, что сайт использует AngularJS (который я очень знаком с) и что входной элемент имеет кучу атрибутов, но только тот, который под воздействием метод change() является «ng-pristine».

+0

большое спасибо, это работает безупречно и решает мои проблемы! – Nikh

+0

Хорошо. Я опубликовал его как ответ. – wOxxOm

ответ

1

Я не могу сказать, не видя фактическую страницу, но это возможно, проверяют страницы, если вход был «напечатали», который мы можем моделировать с помощью document.execCommand:

document.getElementById('videoSearchInput').focus(); 
document.execCommand('selectAll'); 
document.execCommand('insertText', false, 'some text'); 

Или, если вы используете JQuery, зарегистрировать новую функцию:

(function($) { 
    $.fn.execInsertText = function(text) { 
     var activeElement = document.activeElement; 
     var result = this.each(function() { 
      this.focus(); 
      document.execCommand('selectAll'); 
      document.execCommand('insertText', false, text); 
     }); 
     if (activeElement) { 
      activeElement.focus(); 
     } 
     return result; 
    }; 
}(jQuery)); 

затем вызвать его:

$("#videoSearchInput").execInsertText('herpderp'); 
Смежные вопросы