我有以下JS( not jQuery ),我想压缩(保存在带header('Content-type: text/javascript')
的PHP文件中):
var $url = window.location.href;
$url = $url.toLowerCase().replace(/^(http(s)?\:\/\/)/g, ''),
$url = $url.split('/');
var $current_page = $url[$url.length - 1].replace(/(\?.*)?(\#.*)?/g, ''); // Current Page
document.addEventListener('DOMContentLoaded', function() {
if ($current_page === 'index.html') {
if (window.location.hash) {
var $current_hash = window.location.hash.substring(1);
} else {
window.location.hash = '';
}
// Ignore the code above, the important part is right below:
var $fp_imgs = document.querySelectorAll('img.-homepage-poster');
$fp_imgs.forEach(function($fp_img) {
var $imgs = [518966, 518967, 518968, 518969],
$rand = Math.floor($imgs.length * Math.random()),
$xmhr = new XMLHttpRequest();
var response = function($e) {
var $this = this,
$url_creator = window.URL || window.webkitURL,
$image_url = $url_creator.createObjectURL($this.response);
$fp_img.src = $image_url;
}
$xmhr.open('get', '../imgs/' + $imgs[$rand] + '.jpg', true);
$xmhr.responseType = 'blob';
$xmhr.onload = response;
$xmhr.send();
});
}
});
我使用ob_start
使用以下正则表达式模式来压缩文件开头的代码:
ob_start(function($code) {
// return $code; # If the compression causing errors, do not compress
return preg_replace('(\s{2,})', ' ', preg_replace('/(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:|\\\|\')\/\/.*))/', '', $code));
});
当它没有被压缩时,一切运作良好。但是当我使用该模式时,我在控制台中收到以下错误:
SyntaxError:意外令牌:标识符
&#34;缩小&#34;输出:
var $url = window.location.href; $url = $url.toLowerCase().replace(/^(http(s)?\:\/\/)/g, ''), $url = $url.split('/'); var $current_page = $url[$url.length - 1].replace(/(\?.*)?(\#.*)?/g, ''); document.addEventListener('DOMContentLoaded', function() { if ($current_page === 'index.html') { if (window.location.hash) { var $current_hash = window.location.hash.substring(1); } else { window.location.hash = ''; } var $fp_imgs = document.querySelectorAll('img.-homepage-poster'); $fp_imgs.forEach(function($fp_img) { var $imgs = [518966, 518967, 518968, 518969], $rand = Math.floor($imgs.length * Math.random()), $xmhr = new XMLHttpRequest(); var response = function($e) { var $this = this, $url_creator = window.URL || window.webkitURL, $image_url = $url_creator.createObjectURL($this.response); $fp_img.src = $image_url; } $xmhr.open('get', '../imgs/' + $imgs[$rand] + '.jpg', true); $xmhr.responseType = 'blob'; $xmhr.onload = response; $xmhr.send(); }); } });
我该如何解决这个问题?
非常感谢
答案 0 :(得分:0)
问题是您的JavaScript代码的语句终止 s 不正确。这是JavaScript缩小和意大利面内的 PITA 的常见问题。
只是为了它的乐趣,这里是你的代码的正则表达式示例: https://regex101.com/r/Iwvo4I/1/
查看上面JS中的第一个var
语句。如果您没有打算终止var
,那么您似乎已经终止:
:此强>
var $url = window.location.href; <-----------LOOK HERE
$url = $url.toLowerCase().replace(/^(http(s)?\:\/\/)/g, ''),
$url = $url.split('/');
应
var $url = window.location.href, <-----------LOOK HERE
$url = $url.toLowerCase().replace(/^(http(s)?\:\/\/)/g, ''),
$url = $url.split('/');
下一步强>
查看response
函数表达式的代码:
var response = function($e) {
//// ...
} // <--- PUT SEMICOLON HERE
由于这是一个JavaScript表达式,因此该语句应以分号结束。它不是,但 会导致代码在缩小时中断。
为了完全清楚,请使用逗号替换第一行末尾的分号,以纠正编码错误。 在响应函数声明后放置分号
应该这样做。