ÐеÑод document.write â один из наиболее дÑевниÑ
меÑодов Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑекÑÑа к докÑменÑÑ.
У него еÑÑÑ ÑÑÑеÑÑвеннÑе огÑаниÑениÑ, поÑÑÐ¾Ð¼Ñ Ð¾Ð½ иÑполÑзÑеÑÑÑ Ñедко, но по Ñвоей ÑÑÑи он ÑовеÑÑенно Ñникален и иногда, Ñ Ð¾ÑÑ Ð¸ Ñедко, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½.
Ðак ÑабоÑÐ°ÐµÑ document.write
ÐеÑод document.write(str) ÑабоÑÐ°ÐµÑ ÑолÑко пока HTML-ÑÑÑаниÑа наÑ
одиÑÑÑ Ð² пÑоÑеÑÑе загÑÑзки. Ðн допиÑÑÐ²Ð°ÐµÑ ÑекÑÑ Ð² ÑекÑÑее меÑÑо HTML еÑÑ Ð´Ð¾ Ñого, как бÑаÑÐ·ÐµÑ Ð¿Ð¾ÑÑÑÐ¾Ð¸Ñ Ð¸Ð· него DOM.
HTML-докÑÐ¼ÐµÐ½Ñ Ð½Ð¸Ð¶Ðµ бÑÐ´ÐµÑ ÑодеÑжаÑÑ 1 2 3.
<body>
1
<script>
document.write(2);
</script>
3
</body>
ÐÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
огÑаниÑений на ÑодеÑжимое document.write.
СÑÑока пÑоÑÑо пиÑеÑÑÑ Ð² HTML-докÑÐ¼ÐµÐ½Ñ Ð±ÐµÐ· пÑовеÑки ÑÑÑÑкÑÑÑÑ Ñегов, как бÑдÑо она вÑегда Ñам бÑла.
ÐапÑимеÑ:
<script>
document.write('<style> td { color: #F40 } </style>');
</script>
<table>
<tr>
<script>
document.write('<td>')
</script>
ТекÑÑ Ð²Ð½ÑÑÑи TD.
<script>
document.write('</td>')
</script>
</tr>
</table>
Также ÑÑÑеÑÑвÑÐµÑ Ð¼ÐµÑод document.writeln(str) â не менее дÑевний, коÑоÑÑй добавлÑÐµÑ Ð¿Ð¾Ñле str Ñимвол пеÑевода ÑÑÑоки "\n".
ТолÑко до конÑа загÑÑзки
Ðо вÑÐµÐ¼Ñ Ð·Ð°Ð³ÑÑзки бÑаÑÐ·ÐµÑ ÑиÑÐ°ÐµÑ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ð¸ ÑÑÑ Ð¶Ðµ ÑÑÑÐ¾Ð¸Ñ Ð¸Ð· него DOM, по меÑе полÑÑÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии доÑÑÑÐ°Ð¸Ð²Ð°Ñ Ð½Ð¾Ð²Ñе и новÑе ÑзлÑ, и ÑÑÑ Ð¶Ðµ оÑобÑÐ°Ð¶Ð°Ñ Ð¸Ñ . ÐÑÐ¾Ñ Ð¿ÑоÑеÑÑ Ð¸Ð´ÑÑ Ð½ÐµÐ¿ÑеÑÑвнÑм поÑоком. ÐÑ Ð½Ð°Ð²ÐµÑнÑка видели ÑÑо, когда Ð·Ð°Ñ Ð¾Ð´Ð¸Ð»Ð¸ на ÑайÑÑ Ð² каÑеÑÑве поÑеÑиÑÐµÐ»Ñ â бÑаÑÐ·ÐµÑ Ð·Ð°ÑаÑÑÑÑ Ð¾ÑобÑÐ°Ð¶Ð°ÐµÑ Ð½ÐµÐ¿Ð¾Ð»Ð½Ñй докÑменÑ, добавлÑÑ ÐµÐ³Ð¾ новÑми Ñзлами по меÑе Ð¸Ñ Ð¿Ð¾Ð»ÑÑениÑ.
ÐеÑÐ¾Ð´Ñ document.write и document.writeln пиÑÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð² ÑекÑÑ Ð´Ð¾ÐºÑменÑа, до Ñого как бÑаÑÐ·ÐµÑ Ð¿Ð¾ÑÑÑÐ¾Ð¸Ñ Ð¸Ð· него DOM, поÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ могÑÑ Ð·Ð°Ð¿Ð¸ÑаÑÑ Ð² докÑÐ¼ÐµÐ½Ñ Ð²Ñе, ÑÑо Ñгодно, лÑбÑе ÑÑили и незакÑÑÑÑе Ñеги.
ÐÑаÑÐ·ÐµÑ ÑÑÑÑÑ Ð¸Ñ Ð¿Ñи поÑÑÑоении DOM, ÑоÑно Ñак же, как ÑÑиÑÑÐ²Ð°ÐµÑ Ð¾ÑеÑеднÑÑ Ð¿Ð¾ÑÑÐ¸Ñ HTML-ÑекÑÑа.
ТеÑ
ниÑеÑки, вÑзваÑÑ document.write можно в лÑбое вÑемÑ, однако, когда HTML загÑÑзилÑÑ, и бÑаÑÐ·ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¿Ð¾ÑÑÑоил DOM, докÑÐ¼ÐµÐ½Ñ ÑÑановиÑÑÑ Â«Ð·Ð°ÐºÑÑÑÑм». ÐопÑÑка допиÑаÑÑ ÑÑо-Ñо в закÑÑÑÑй докÑÐ¼ÐµÐ½Ñ Ð¾ÑкÑÑÐ²Ð°ÐµÑ ÐµÐ³Ð¾ заново. ÐÑи ÑÑом вÑе ÑекÑÑее ÑодеÑжимое ÑдалÑеÑÑÑ.
ТекÑÑÐ°Ñ ÑÑÑаниÑа, ÑкоÑее вÑего, Ñже загÑÑзилаÑÑ, поÑÑÐ¾Ð¼Ñ ÐµÑли Ð²Ñ Ð½Ð°Ð¶Ð¼ÑÑе на ÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ â ÐµÑ ÑодеÑжимое ÑдалиÑÑÑ:
Ðз-за ÑÑой оÑобенноÑÑи document.write Ð´Ð»Ñ Ð·Ð°Ð³ÑÑженнÑÑ
докÑменÑов не иÑполÑзÑÑÑ.
document.writeРнекоÑоÑÑÑ
ÑовÑеменнÑÑ
бÑаÑзеÑаÑ
пÑи полÑÑении ÑÑÑаниÑÑ Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð¼ Content-Type: text/xml или Content-Type: text/xhtml+xml вклÑÑаеÑÑÑ Â«XML-Ñежим» ÑÑÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑменÑа. ÐеÑод document.write пÑи ÑÑом не ÑабоÑаеÑ.
ÐÑо лиÑÑ Ð¾Ð´Ð½Ð° из пÑиÑин, по коÑоÑой XML-Ñежим обÑÑно не иÑполÑзÑÑÑ.
ÐÑеимÑÑеÑÑва пеÑед innerHTML
ÐеÑод document.write â динозавÑ, он ÑÑÑеÑÑвовал деÑÑÑки миллионов Ð»ÐµÑ Ð½Ð°Ð·Ð°Ð´. С ÑеÑ
поÑ, как поÑвилÑÑ Ð¸ ÑÑал ÑÑандаÑÑнÑм меÑод innerHTML, нÑжда в нÑм Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ñедко, но некоÑоÑÑе пÑеимÑÑеÑÑва вÑÑ Ð¶Ðµ еÑÑÑ.
-
ÐеÑод
document.writeÑабоÑÐ°ÐµÑ Ð±ÑÑÑÑее, ÑакÑиÑеÑки ÑÑо ÑамÑй бÑÑÑÑÑй ÑпоÑоб добавиÑÑ Ð½Ð° ÑÑÑаниÑÑ ÑекÑÑ, ÑгенеÑиÑованнÑй ÑкÑипÑом.ÐÑо еÑÑеÑÑвенно, Ð²ÐµÐ´Ñ Ð¾Ð½ не модиÑиÑиÑÑÐµÑ ÑÑÑеÑÑвÑÑÑий DOM, а пиÑÐµÑ Ð² ÑекÑÑ ÑÑÑаниÑÑ Ð´Ð¾ его генеÑаÑии.
-
ÐеÑод
document.writeвÑÑавлÑÐµÑ Ð»Ñбой ÑекÑÑ Ð½Ð° ÑÑÑаниÑÑ Â«ÐºÐ°Ðº еÑÑÑ», в Ñо вÑÐµÐ¼Ñ ÐºÐ°ÐºinnerHTMLÐ¼Ð¾Ð¶ÐµÑ Ð²Ð¿Ð¸ÑаÑÑ Ð»Ð¸ÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñй HTML (пÑи попÑÑке подÑÑнÑÑÑ Ð½ÐµÐ²Ð°Ð»Ð¸Ð´Ð½Ñй â бÑаÑÐ·ÐµÑ ÑкоÑÑекÑиÑÑÐµÑ ÐµÐ³Ð¾).
ÐÑи пÑеимÑÑеÑÑва ÑвлÑÑÑÑÑ ÑкоÑее ÑÑедÑÑвом опÑимизаÑии, коÑоÑое нÑжно иÑполÑзоваÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñам, где Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð°Ñ Ð¾Ð¿ÑимизаÑÐ¸Ñ Ð½Ñжна или ÑмеÑÑна.
Ðднако, document.write по Ñвоей пÑиÑоде Ñникален: он добавлÑÐµÑ ÑекÑÑ Â«Ð² ÑекÑÑее меÑÑо докÑменÑа», без вÑÑкиÑ
Ñ
иÑÑоÑмнÑÑ
DOM. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð½ бÑÐ²Ð°ÐµÑ Ð¿ÑоÑÑо-напÑоÑÑо Ñдобен, из-за Ñего его неÑедко иÑполÑзÑÑÑ Ð½Ðµ по назнаÑениÑ.
ÐнÑипÑимеÑ: Ñеклама
ÐапÑимеÑ, document.write иÑполÑзÑÑÑ Ð´Ð»Ñ Ð²ÑÑавки ÑекламнÑÑ
ÑкÑипÑов и ÑазлиÑнÑÑ
ÑÑÑÑÑиков, когда URL ÑкÑипÑа необÑ
одимо генеÑиÑоваÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки, добавлÑÑ Ð² него паÑамеÑÑÑ Ð¸Ð· JavaScript, напÑимеÑ:
<script>
// в url Ñказано ÑекÑÑее ÑазÑеÑение ÑкÑана поÑеÑиÑелÑ
var url = 'http://ads.com/buyme?screen=' + screen.width + "x" + screen.height;
// загÑÑзиÑÑ Ñакой ÑкÑÐ¸Ð¿Ñ Ð¿ÑÑмо ÑейÑаÑ
document.write('<script src="' + url + '"></scr' + 'ipt>');
</script>
ÐакÑÑваÑÑий Ñег </script> в ÑÑÑоке ÑазделÑн, ÑÑÐ¾Ð±Ñ Ð±ÑаÑÐ·ÐµÑ Ð½Ðµ Ñвидел </script> и не поÑÑиÑал его конÑом ÑкÑипÑа.
Также иÑполÑзÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ:
document.write('<script src="' + url + '"><\/script>');
ÐдеÑÑ <\/script> вмеÑÑо </script>: обÑаÑнÑй ÑÐ»ÐµÑ \ обÑÑно иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð²ÑÑавки ÑпеÑÑимволов Ñипа \n, а еÑли Ñакого ÑпеÑÑимвола неÑ, в данном ÑлÑÑае \/ не ÑвлÑеÑÑÑ ÑпеÑÑимволом, Ñо бÑÐ´ÐµÑ Ð¿ÑоигноÑиÑован. Так ÑÑо полÑÑаеÑÑÑ Ñакой алÑÑеÑнаÑивнÑй ÑпоÑоб безопаÑно вÑÑавиÑÑ ÑÑÑÐ¾ÐºÑ </script>.
СеÑвеÑ, полÑÑив запÑÐ¾Ñ Ñ Ñакими паÑамеÑÑами, обÑабаÑÑÐ²Ð°ÐµÑ ÐµÐ³Ð¾ и, ÑÑиÑÑÐ²Ð°Ñ Ð¿ÐµÑеданнÑÑ Ð¸Ð½ÑоÑмаÑиÑ, генеÑиÑÑÐµÑ ÑекÑÑ ÑкÑипÑа, в коÑоÑом обÑÑно еÑÑÑ ÐºÐ°ÐºÐ¾Ð¹-Ñо дÑÑгой document.write, ÑиÑÑÑÑий на ÑÑом меÑÑе баннеÑ.
ÐÑоблема здеÑÑ Ð² Ñом, ÑÑо загÑÑзка Ñакого ÑкÑипÑа блокиÑÑÐµÑ Ð¾ÑÑиÑÐ¾Ð²ÐºÑ Ð²Ñей ÑÑÑаниÑÑ.
То еÑÑÑ, дело даже не в Ñамом document.write, а в Ñом, ÑÑо в ÑÑÑаниÑÑ Ð²ÑÑавлÑеÑÑÑ ÑÑоÑонний ÑкÑипÑ, а бÑаÑÐ·ÐµÑ ÑÑÑÑоен Ñак, ÑÑо пока он его не загÑÑÐ·Ð¸Ñ Ð¸ не вÑÐ¿Ð¾Ð»Ð½Ð¸Ñ â он не бÑÐ´ÐµÑ Ð´Ð°Ð»ÑÑе ÑÑÑоиÑÑ DOM и показÑваÑÑ Ð´Ð¾ÐºÑменÑ.
ÐÑедÑÑавим на минÑÑÑ, ÑÑо ÑеÑÐ²ÐµÑ ads.com, Ñ ÐºÐ¾ÑоÑого гÑÑзиÑÑÑ ÑкÑипÑ, ÑабоÑÐ°ÐµÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ или вообÑе Ð·Ð°Ð²Ð¸Ñ â завиÑÐ½ÐµÑ Ð¸ наÑа ÑÑÑаниÑа.
ЧÑо делаÑÑ?
Ð ÑовÑеменнÑÑ
бÑаÑзеÑаÑ
Ñ ÑкÑипÑов еÑÑÑ Ð°ÑÑибÑÑÑ async и defer, коÑоÑÑе ÑазÑеÑаÑÑ Ð±ÑаÑзеÑÑ Ð¿ÑодолжаÑÑ Ð¾Ð±ÑабоÑÐºÑ ÑÑÑаниÑÑ, но пÑимениÑÑ Ð¸Ñ
здеÑÑ Ð½ÐµÐ»ÑзÑ, Ñак как ÑекламнÑй ÑкÑÐ¸Ð¿Ñ Ð·Ð°Ñ
оÑÐµÑ Ð²ÑзваÑÑ document.write именно на ÑÑом меÑÑе, и бÑаÑÐ·ÐµÑ Ð½Ðµ должен двигаÑÑÑÑ Ð²Ð¿ÐµÑÑд по докÑменÑÑ.
ÐлÑÑеÑнаÑива â иÑполÑзоваÑÑ Ð´ÑÑгие ÑÐµÑ Ð½Ð¸ÐºÐ¸ вÑÑавки ÑÐµÐºÐ»Ð°Ð¼Ñ Ð¸ ÑÑÑÑÑиков. ÐÑимеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑвидеÑÑ Ð² коде Google Analytics, ЯндекÑ.ÐеÑÑики и дÑÑÐ³Ð¸Ñ .
ÐÑли ÑÑо невозможно â пÑименÑÑÑ Ð²ÑÑкие Ñ
иÑÑÑе опÑимизаÑии, напÑÐ¸Ð¼ÐµÑ Ð·Ð°Ð¼ÐµÐ½ÑÑÑ Ð¼ÐµÑод document.write Ñвоей ÑÑнкÑией, и она Ñже ÑазбиÑаеÑÑÑ Ñо ÑкÑипÑами и баннеÑами.
ÐÑого
ÐеÑод document.write (или writeln) пиÑÐµÑ ÑекÑÑ Ð¿ÑÑмо в HTML, как бÑдÑо он Ñам вÑегда бÑл.
-
ÐÑÐ¾Ñ Ð¼ÐµÑод Ñедко иÑполÑзÑеÑÑÑ, Ñак как ÑабоÑÐ°ÐµÑ ÑолÑко из ÑкÑипÑов, вÑполнÑемÑÑ Ð² пÑоÑеÑÑе загÑÑзки ÑÑÑаниÑÑ.
ÐапÑÑк поÑле загÑÑзки пÑиведÑÑ Ðº оÑиÑÑке докÑменÑа.
-
ÐеÑод
document.writeоÑÐµÐ½Ñ Ð±ÑÑÑÑ.РоÑлиÑие Ð¾Ñ ÑÑÑановки
innerHTMLи DOM-меÑодов, он не изменÑÐµÑ ÑÑÑеÑÑвÑÑÑий докÑменÑ, а ÑабоÑÐ°ÐµÑ Ð½Ð° ÑÑадии ÑекÑÑа, до Ñого как DOM-ÑÑÑÑкÑÑÑа ÑÑоÑмиÑована. -
Ðногда
document.writeиÑполÑзÑÑÑ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑкÑипÑов Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑким URL.РекомендÑеÑÑÑ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ ÑÑого, Ñак как бÑаÑÐ·ÐµÑ Ð¾ÑÑановиÑÑÑ Ð½Ð° меÑÑе Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑкÑипÑа и бÑÐ´ÐµÑ Ð¶Ð´Ð°ÑÑ ÐµÐ³Ð¾ загÑÑзки. ÐÑли ÑкÑÐ¸Ð¿Ñ Ð±ÑÐ´ÐµÑ ÑоÑмозиÑÑ, Ñо и ÑÑÑаниÑа â Ñоже.
ÐоÑÑÐ¾Ð¼Ñ Ð¶ÐµÐ»Ð°ÑелÑно подклÑÑаÑÑ Ð²Ð½ÐµÑние ÑкÑипÑÑ, иÑполÑзÑÑ Ð²ÑÑÐ°Ð²ÐºÑ ÑкÑипÑа ÑеÑез DOM или
async/defer. СовÑеменнÑе ÑиÑÑÐµÐ¼Ñ ÑÐµÐºÐ»Ð°Ð¼Ñ Ð¸ ÑÑаÑиÑÑики Ñак и делаÑÑ.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)