我有以下功能縮小:PHP minify函數似乎破壞了內聯JS?
public static function minify($buffer)
{
$search = array(
'/\>[^\S ]+/s',
'/[^\S ]+\</s',
'/(\s)+/s'
);
$replace = array(
'>',
'<',
'\\1'
);
$buffer = preg_replace($search, $replace, $buffer);
return $buffer;
}
此功能是爲了來縮小我的HTML輸出使用ob_start()
。該功能取自:https://stackoverflow.com/a/6225706/4601581
這個函數似乎破壞了我的一些JS。例如:一個按鈕i單擊以執行一些JS:
<button type="button" class="btn btn-<?= Config::$ELEMENT_COLOR ?> btn-block" onclick="addLastInput(<?= $mask->getId() ?>)">Do it</button>
的$id
我給addLastInput是一個簡單的數字,從$mask->getId()
服用。
我也有這一點的JS代碼來填充一些數據數組:
<script>lastSubmissionData[<?=$mask->getId()?>] = '<?=json_encode($lastSubmissionData)?>';</script>
最後我的JS功能其實我是想用我給出參數(標識)執行和數據陣列:
function addLastInput(maskId) {
var data = lastSubmissionData[maskId];
for (var i = 0; i < data.length; i++) {
// TODO
}
}
無論何時我只加載頁面,它只是告訴我在Chrome控制檯中Uncaught SyntaxError: Unexpected end of input
。每當我這樣做,不使用minify函數和完全取消ob_start()
,它只是工作,我可以使用它。
結論:minify函數似乎將我的內聯JS制動爲連接的SO答案中的註釋。問題:我該如何解決這個問題?我甚至google搜索其他縮小解決方案,如:https://gist.github.com/tovic/d7b310dea3b33e4732c0
所有這些似乎都不能通過打破我的網站工作。什麼是最好的解決方案,讓我使用我的JS代碼,並仍然縮小我的HTML輸出?
把你的JavaScript在外部文件中,問題就迎刃而解了。另一方面,整個庫都是爲了正確處理縮小而編寫的,而且它們有時還會失敗,只是用一些正則表達式來做這件事肯定會有問題。 – adeneo
將js代碼放入js文件中,根本不要使用內嵌JavaScript。 – baao
@Michael:問題是,我只能將函數本身放在extern .js文件中。不是真的。因爲在頁面加載時,我的PHP代碼實際上會生成大量寫入JS變量的數據以備後用。我不能把它放到extern .js文件中。 – BoA456