Невозможно изменить iframe после contentWindow.document.close () - PullRequest
1 голос
/ 02 июня 2019

Я разрабатываю расширение для Chrome, в котором я пытаюсь автоматически заполнять поля / значения в форме, чтобы мне не нужно было вводить их явно. Я пытаюсь загрузить контент во время window.onload

window.onload = function() {
  alert(document.getElementById('mce_0_ifr'));
  alert("Window loaded!");
  setTimeout(setText, 2000);    
};

function setText() {
	/**
	This logic of having it as 0 will not work always. When you create the same dialog for 
	the second time it's incrementing it's value by 1.
	**/
	alert("Inside set text");
	if(document.getElementById('mce_0_ifr') != null) {
        var doc = document.getElementById('mce_0_ifr').contentWindow.document;
		doc.open();
		doc.write('<b> Student details </b>');
		doc.write('<br><br> Student Name : ');
		doc.write('<br><br> Age : ');
		doc.write('<br><br> Class : ');
		doc.write('<br><br> Subjects interested : ');
		doc.write('<br><br> Extra caricular activities : ');
		doc.write('<br><br> Father's name : ');
		doc.write('<br><br> Mother's name : ');
		doc.write('<br><br> Maid's name : ');
		doc.write('')
		doc.close();
	}
}

После этого я не могу добавить контент в iframe с идентификатором mce_0_ifr. Я хотел бы загрузить контент (некоторый текст по умолчанию) в iframe при загрузке страницы и должен позволить пользователю редактировать его дальше. Любая помощь по этому вопросу будет высоко ценится.

1 Ответ

1 голос
/ 03 июня 2019

После закрытия () документа он завершает запись в этот документ. Чтобы снова написать (), вам нужно снова открыть (). В вашем случае его повторное открытие приведет к потере ранее записанного содержимого. Вот что я делаю. Сначала откройте документ и напишите на нем базовую структуру HTML:

doc.open();
doc.write("<html><head></head><body></body></html>");
doc.close();

Теперь вы можете манипулировать документом, манипулируя DOM, вместо того, чтобы писать прямо в него:

var line=document.createElement("div");
line.innerHTML='<b> Student details </b>';
line.innerHTML=line.innerHTML+'<br><br> Student Name : <span id="student_name"></span>';
line.innerHTML=line.innerHTML+'<br><br> Age : <span id="student_age"></span>';
...
doc.body.append(line);

Кроме того, вы можете изменить имя студента и имя студента, получив их элемент DOM, а затем изменив его значение:

doc.getElementById("student_name").innerText="rm -rf star";
doc.getElementById("student_age").innerText="21";
...