Мне нужно создать расширение Chrome, которое автоматизирует некоторые взаимодействия с веб-приложением, написанным на Polymer.
У меня есть этот сгенерированный HTML:
<paper-input id="value-input" label="Value" no-label-float="" tabindex="0" aria-disabled="false">
<paper-input-container class="style-scope paper-input">
<template is="dom-if" class="style-scope paper-input-container"></template>
<div class="input-content style-scope paper-input-container">
<div class="label-and-input-container style-scope paper-input-container" id="labelAndInputContainer">
<label aria-hidden="true" slot="label" class="style-scope paper-input" for="input-2"
id="paper-input-label-2">Value</label>
<input is="iron-input" slot="input" class="input-element style-scope paper-input" autocomplete="off"
placeholder="" autocapitalize="none" autocorrect="off" aria-describedby=""
aria-labelledby="paper-input-label-2" tabindex="0" id="input-2">
</div>
</div>
<div class="underline style-scope paper-input-container">
<div class="unfocused-line style-scope paper-input-container"></div>
<div class="focused-line style-scope paper-input-container"></div>
</div>
<div class="add-on-content style-scope paper-input-container"></div>
</paper-input-container>
</paper-input>
Этот вход является частью более крупной (полимерной) формы, для которой кнопка «Отправить» становится доступной только в том случае, если что-то записано на входе.
К сожалению, наивное выполнение document.querySelector('#input-2').value = 'something'
не сработает.
Кнопка остается отключенной. Чтобы кнопка была активирована, мне нужно использовать API, предоставленный Polymer, для обновленных элементов.
Так, например, document.querySelector('paper-input').updateValueAndPreserveCaret('something')
(который использует метод updateValueAndPreserveCaret
элемента Polymer) будет работать. Кнопка будет уведомлена и активирована.
проблема
Внутри скрипта содержимого моего расширения у меня нет доступа к каким-либо свойствам / методам, которые применяются к пользовательским компонентам Polymer.
Например, если я попытаюсь document.querySelector('paper-input').updateValueAndPreserveCaret('something')
из моего скрипта содержимого, я получу ошибку, что updateValueAndPreserveCaret
не определено.
Это верно не только для методов, предоставляемых Polymer, но и для свойств (например, document.querySelector('paper-input').$
тоже не определено)
Это тот случай, когда я не могу получить доступ к свойствам и функциям, потому что они были созданы в другом window
контексте?