После триллион бесполезных кода казни, я просто отметил любопытное заявление внутри длинного списка предупреждений:
«Не удалось выполнить„запись“на„Документ“: Это невозможно записать в документ от асинхронно загруженного внешнего скрипта, если он явно не открыт ».. Я просмотрел это сообщение, и нашел nice question.
только не принял ответ предложить postscribe.js
Асинхронный писать JavaScript, даже с document.write.
Удаленные сценарии, особенно объявления, блокируют страницу от чего-либо еще во время загрузки. Они вносят большой процент от времени загрузки, который влияет на вашу прибыль. Асинхронные объявления не блокируют страницу, и может быть доставлен после основного содержимого - Async FTW.
Почему так сложно доставлять объявления асинхронно? Потому что они могут содержать вызовы document.write, которые ожидают обработки синхронно. PostScript позволяет отправлять синхронное объявление асинхронно без изменения рекламного кода.
Так, так как я должен управлять обоими объявления в теле и на боковой панели, я сделал немного рефакторинга, перемещая PHP функцию в functions.php:
/**
* redefine and get the legacy ads block from base library by name
* render as encoded plain text inside a *pre* wrapper
*/
function tsp_get_banner($current_banner_name){
$STRING_EMPTY = "";
// https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags
$openExpr = "/(<div[^>]*>)/";
$closeExpr = "/(<\/div>)/";
$openExprResult = $closeExpreResult = array();
$banner = original_tsp_get_banner($current_banner_name);
preg_match($openExpr, $banner, $openExprResult);
$banner = preg_replace($openExpr, $STRING_EMPTY, $banner);
preg_match($closeExpr, $banner, $closeExpreResult);
$banner = preg_replace($closeExpr, $STRING_EMPTY, $banner);
return wrapAdsSnippet($banner, $openExprResult[0], $closeExpreResult[0]);
}
function wrapAdsSnippet($source, $prefix, $postfix){
$result = '<pre data-script-reference style="display:none;">'
.htmlspecialchars($source)
.'</pre>';
if(isset($prefix) && isset($postfix)){
$result = $prefix.$result.$postfix;
}
return $result;
}
затем я изменил включение блока:
, так что мне ничего не нужно менять.
<?php
эхо tsp_get_banner ("среднего коробчатая боковая панель");
echo renderAds("middle-box-sidebar");
?>
Я только изменить окончательный сценарий, чтобы включить в footer.php:
var MyCompanyLab;
(function (MyCompanyLab) {
"use strict";
var Ads;
(function (Ads) {
var Optimization;
(function (Optimization) {
var PostProcessor = (function() {
function PostProcessor() {
}
PostProcessor.postponeAdsExecution = function() {
$("pre[data-script-reference]").each(function (idx, item) {
var parentNode = item.parentNode;
postscribe(parentNode, $('<textarea />').html(item.innerHTML).text(), {
done: function() { },
error: function() { },
releaseAsync: true,
});
parentNode.removeChild(item);
});
};
return PostProcessor;
}());
Optimization.PostProcessor = PostProcessor;
})(Optimization = Ads.Optimization || (Ads.Optimization = {}));
})(Ads = MyCompanyLab.Ads || (MyCompanyLab.Ads = {}));
})(MyCompanyLab|| (MyCompanyLab= {}));
<script type="text/javascript">
...
MyCompanyLab.Ads.Optimization.PostProcessor.postponeAdsExecution();
...
</script>