2016-08-16 3 views
2

Я поддерживаю надстройку надстройки для Firefox. Чтобы передать процесс проверки надстройки Mozilla, я должен заменить innerHTML() вызовы, управляющие содержимым элемента DOM.Я хочу заменить innerHTML() вызов в Firefox overlay addon

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

var newCell = tbl.rows[row].insertCell(col); 
var div = document.createElement('div'); 
div.appendChild(document.createTextNode(content)); 
newCell.appendChild(div); 

сообщение об ошибке:

TypeError: Argument 1 of Node.appendChild does not implement interface Node. 

[email protected]://gre/modules/RemoteAddonsChild.jsm:461:5 

EventTargetChild/[email protected]://gre/modules/RemoteAddonsChild.jsm:431:38 

Добавление сообщения журнала между линиями показывают, что тип нового cell и div элемент различны:

var newCell = tbl.rows[row].insertCell(col); 
console.log("cell-0: " + newCell); 
var div = document.createElement('div'); 
console.log("div-0: " + div); 
div.appendChild(document.createTextNode(content)); 
console.log("div-1: " + div); 
console.log("cell-1: " + newCell); 
newCell.appendChild(div); 
console.log("cell-2: " + newCell); 

сообщения журнала являются:

cell-0: [object CPOW [object HTMLTableCellElement]] 
div-0: [object XULElement] 
div-1: [object XULElement] 
cell-1: [object CPOW [object HTMLTableCellElement]] 

Любые идеи, что я делаю неправильно здесь?

Заранее спасибо.

+0

Извините, не помогая здесь, но я использую FF 48, и это работает: https://jsfiddle.net/pj2eugLh/ – blex

+1

Вы используете ['HTMLTableRowElement.insertCell()'] (https: // разработчик. mozilla.org/en-US/docs/Web/API/HTMLTableRowElement/insertCell), чтобы попытаться вставить узлы в документ XUL. Кажется, он создал элементы HTML вместо элементов XUL. Нам понадобится дополнительная информация о '', которую вы вставляете и как она была ранее обработана. Полезной будет ссылка на текущую версию надстройки wo9uld. – Makyen

+0

@blex. Вставляется в документ XUL. Невозможно точно прототипировать его, используя сайт на основе HTML (например, jsfiddle.net).Тестирование XUL потребует, чтобы файл был локальным для машины (XUL Explorer) или с использованием 'chrome: //' URI в приложении на основе Mozilla. – Makyen

ответ

1

клетки-0: [объект КОГО [объект HTMLTableCellElement]]

КИМ является cross process object wrapper, что означает, что происходит от дочернего процесса, или, по крайней мере, от передачи сообщений API. Вы не получаете доступ к DOM в пути e10s-safe.

Div-0: [объект XULElement]

Morecover вы создаете элемент XUL (а конкретные Mozilla XML пространства имен) и попытке вставить его в HTML-документе. Это означает, что вы работаете через границы документов (CPOW уже подразумевает столько же). Объект document в вашей локальной области не является ownerDocumenttbl.

Таким образом, даже если проблема с перекрестным процессом не существовала, вы все равно будете использовать DOM неправильно.


Если вы хотите, чтобы взаимодействовать с DOM документов контента, которые вы должны использовать message manager and frame scripts. Это примитивы низкого уровня, лежащие в основе сценариев Addon SDK и webextension.

Кроме того, вы можете установить <em:multiprocessCompatible>true</em:multiprocessCompatible>flag in the install.rdf, который отключит регулировочные шайбы совместимости или включить dom.ipc.shims.enabledWarnings в о: конфигурациях, которые должны привести к предупреждениям/ошибки бросают раньше, если вы пытаетесь получить доступ к любому незащищенному API.