首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >压缩中断脚本

压缩中断脚本
EN

Stack Overflow用户
提问于 2018-03-18 19:54:37
回答 1查看 55关注 0票数 0

我有以下JS (而不是jQuery),我想压缩它(用header('Content-type: text/javascript')保存在PHP文件中):

代码语言:javascript
复制
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和以下regex模式来压缩文件开头的代码:

代码语言:javascript
复制
ob_start(function($code) {
    // return $code; # If the compression causing errors, do not compress
    return preg_replace('(\s{2,})', ' ', preg_replace('/(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:|\\\|\')\/\/.*))/', '', $code));
});

当它不被压缩时,一切都很正常。但是,当我使用该模式时,控制台中会出现以下错误:

SyntaxError:意外令牌:标识符

“缩小”产出:

代码语言:javascript
复制
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(); }); } });

我怎么才能解决这个问题?

非常感谢

EN

回答 1

Stack Overflow用户

发布于 2018-03-18 20:28:44

问题是您的JavaScript代码有不正确的语句终止。这是一个常见的问题,JavaScript小型化和皮塔在意大利面。

为了好玩,下面是regex示例和您的代码:https://regex101.com/r/Iwvo4I/1/

查看上面JS中的第一个var语句。当您不打算终止var时,您似乎已经终止了它:

这个

代码语言:javascript
复制
var $url = window.location.href; <-----------LOOK HERE

    $url = $url.toLowerCase().replace(/^(http(s)?\:\/\/)/g, ''),
    $url = $url.split('/');

应该是

代码语言:javascript
复制
var $url = window.location.href, <-----------LOOK HERE

    $url = $url.toLowerCase().replace(/^(http(s)?\:\/\/)/g, ''),
    $url = $url.split('/');

NEXT

查看response函数表达式的代码:

代码语言:javascript
复制
    var response = function($e) {
       //// ... 
    } // <--- PUT SEMICOLON HERE

因为这是一个JavaScript表达式,所以语句应该以分号结束。它不是,但它是导致您的代码中断时缩小。

为了清楚起见,请将第一行末尾的分号替换为逗号,以纠正编码错误。,并在响应函数声明之后放置分号。

这样就行了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49352227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档