Có cách nào để xem lịch sử thông báo trình duyệt Chrome không?


56

Tôi nhận được thông báo Chrome từ một số trang web và chúng hoạt động khi tôi thậm chí không có bất kỳ tab nào mở cho các trang web đó.

Nhưng đôi khi tôi nhận được các thông báo Chrome này khi tôi không ở bàn làm việc hoặc nhìn vào máy tính xách tay của mình.

Vì một số thông báo này hữu ích với tôi, tôi muốn có thể truy cập bất kỳ thông báo nào tôi đã bỏ lỡ.

Có cách nào để xem lịch sử thông báo?


1
Có vẻ như không phải như vậy. Nhìn vào bài đăng này ( theverge.com/2015/10/14/9531133/ ,), họ đã sắp xếp lại chính sách thông báo của mình và xóa nó khỏi máy tính để bàn để đưa nó lên các trang web riêng lẻ. Điều duy nhất để truy cập thông báo mới là nhấp vào chuông trên trang google.
Terry

1
Có vẻ như không: Productforums.google.com/forum/#!msg/chrome/xs9PflHTfho/ do - rất đáng tiếc.
LB--

Nơi duy nhất tôi tìm thấy thông báo dưới dạng danh sách là nếu trang web kích hoạt chúng có thông qua trang web của họ. Chrome dường như không thu thập chúng theo cách tương tự chrome://notificationsvà chúng không xuất hiện trên HĐH.
Jason Lydon

Chấp nhận câu trả lời hợp lệ @paradroid
Seditesh

Câu trả lời:


31

Nếu bạn có máy Mac, có một cách! 😄

Đây là cách danh sách thông báo sẽ như thế nào:

Đây là cách danh sách thông báo sẽ như thế nào.

Tất cả bạn phải làm là:

1. Trong chrome, đi đến:

chrome://flags/

2. Tìm kiếm:

Enable native notifications. Mac

3. Kích hoạt nó, khởi động lại chrome, bạn đã hoàn thành. Thưởng thức!

BIÊN TẬP:

  • Bạn có thể không cần phải làm như trên nữa.

Bắt đầu trong Chrome 59, các thông báo được gửi qua API Thông báo hoặc API tiện ích mở rộng chrome.notifying sẽ được hiển thị trực tiếp bởi hệ thống thông báo gốc macOS thay vì hệ thống của Chrome. [ nguồn ]


2
Điều này không trả lời câu hỏi xem lịch sử thông báo, chỉ xem thông báo.
Bjorn

6
@BjornTipling Nó trả lời nó. Anh ấy hỏi liệu anh ấy có thể thấy các thông báo anh ấy bỏ lỡ khi đi xa không và phương pháp của tôi thực hiện chính xác điều đó.
Esdras Lopez

1
Nếu bạn đặt các liên kết dưới dạng nhận xét, tôi sẽ thêm chúng vào bài đăng của bạn cho bạn, @EsdrasLopez
user418150

1
@ user418150 Tôi đánh giá cao điều đó, nhưng giờ tôi đã có tiếng tăm. :) Kiểm tra các chỉnh sửa.
Esdras Lopez

2
Vấn đề chính ở đây là nó chỉ lưu trữ thông báo nếu bạn không nhấp vào nó. Một vài lần tôi đã nhấp vào một tiêu đề bài viết thú vị, chỉ để nó không tải được, tuy nhiên, nó vẫn bị xóa khỏi danh sách thông báo. Thông thường các bài viết quá mới để được Googled và thường thì tiêu đề thông báo không khớp với tiêu đề bài viết, vì vậy nó bị lạc trong ruột của web.
iBorg

12

Trên MacOSX, bạn sẽ có thư mục Chrome nằm trong Thư viện / Hỗ trợ ứng dụng. Mở ứng dụng đầu cuối và chạy các lệnh tiếp theo:

cd ~/Library/Application\ Support/Google/Chrome/Default/Platform\ Notifications/
ls -la

Bây giờ bạn sẽ thấy các tập tin như thế này:

drwx------@  7 visi  staff   224 Jul 13 18:16 .
drwx------  75 visi  staff  2400 Jul 15 11:05 ..
-rw-------@  1 visi  staff   759 Jul 15 10:57 000003.log
-rw-------@  1 visi  staff    16 Jul 13 18:16 CURRENT
-rw-------@  1 visi  staff     0 Jul 13 18:16 LOCK
-rw-------@  1 visi  staff   147 Jul 13 18:16 LOG
-rw-------@  1 visi  staff    41 Jul 13 18:16 MANIFEST-000001

Bạn có thể thấy cái gần đây nhất là 000003.log, vì vậy hãy kiểm tra nó bằng lệnh tiếp theo:

tail -n 100 000003.log

Và bạn sẽ thấy 100 mục cuối cùng từ nhật ký này. Sau đó, bạn có thể mở cài đặt chrome và tắt thông báo trang web đó.

Lưu ý rằng nếu bạn có một vài cấu hình trong chrome, đường dẫn của bạn có thể khác, như thế này (Profile1 thay vì Mặc định):

cd ~/Library/Application\ Support/Google/Chrome/Profile\ 1/Platform\ Notifications/

3
Đây phải là câu trả lời được chấp nhận. :)
Cody A. Ray

1
Vẫn hoạt động vào năm 2019 (mặc dù nhật ký cần một chút thông dịch). Câu trả lời tuyệt vời cảm ơn
carpii

12

Nếu bạn đi đến %LocalAppData%\Google\Chrome\User Data\Default\Platform Notifications, có một tệp nhật ký của các thông báo trong quá khứ.


4
tốt, nhưng hãy xem xét chỉ định đường dẫn là "% LocalAppData% \ Google \ Chrome \ Dữ liệu người dùng \ Mặc định \ Thông báo nền tảng" thay vì mã cứng. Nó hoạt động hoàn hảo trên bất kỳ PC nào.
Dmitry Gusarov

Trong UserData / -folder, trước tiên bạn có thể phải xác định vị trí thư mục hồ sơ của mình, chẳng hạn như "C: \ Users \ username \ AppData \ Local \ Google \ Chrome \ UserData \ Profile 1 \ Thông báo nền tảng"
Maffelu

1
Dữ liệu này là nhị phân. Làm thế nào để đọc nó?
Gaia

Trên Chrome 71 và tệp nhật ký trống. Điều này đã bị vô hiệu hóa tại một số điểm?
James

3
@Gaia Tôi đã tự hỏi điều tương tự và chỉ cần đánh cắp một số mã Java nhảm nhí, một công việc có thể chấp nhận được trong việc giải mã hầu hết nó. Tôi đã đăng nó dưới đây: superuser.com/a/1410742/778383
Chủ tịch Dreamspace

3

Vì dường như không thể nhận được bản ghi thông báo trực tiếp, nếu tôi gặp vấn đề tương tự, tôi sẽ gian lận bằng cách sử dụng trình giả lập điện thoại Android hoặc điện thoại, như người dùng đã đề xuất PushbONS. Nhưng không chỉ có PushbONS, còn có một số ứng dụng khác, chúng ta có thể thảo luận về các thủ thuật Android để nghe và ghi lại thông báo, trong một luồng riêng biệt.

Nếu bạn là một lập trình viên, bạn có thể giải quyết vấn đề của mình mặc dù tiện ích mở rộng tự làm:

https://stackoverflow.com/questions/15949606/how-can-i-listen-to-notifying

"Bạn có thể móc hàm webkitNotutions.createNotification để bất cứ khi nào thông báo được tạo, bạn sẽ chạy một số mã cụ thể."


2

Chạm vào một cái gì đó đã được đề cập ở trên một chút nhưng với một nút xoắn đảm bảo bạn không bị thiếu thông báo trên OSX:

  1. Ở bên phải của thanh trên cùng chính, nhấp vào biểu tượng thông báo.

  2. Nhấp vào bánh răng (phía dưới bên phải của màn hình thông báo)

  3. Chọn Chrome để thiết lập cách hiển thị thông báo.

  4. Theo mặc định, "Biểu ngữ" được chọn và chúng có thể biến mất tự động. Thay vào đó, chọn loại "Thông báo" và chúng sẽ ở đó miễn là bạn không thừa nhận chúng!

Không có gì :)


2

Bạn có thể xem lịch sử của Thông báo đẩy. Ở góc dưới bên phải của màn hình PC của bạn trên thanh tác vụ trông giống như một bong bóng lời nói và nếu bạn di chuột qua nó, bạn sẽ thấy nó thực sự được gọi là "thông báo". Nếu bạn nhấp vào bong bóng đó, nó sẽ hiển thị các email chưa đọc / mới và bất kỳ thông báo đẩy nào mà bạn chưa loại bỏ. Tôi đến đây để tìm câu trả lời này và không tìm thấy nó nhưng sau đó đã tìm ra cách giải quyết này. Tôi đang sử dụng Windows 10.


Vâng, đây là một điều gần đây trên Win10, nhưng nó là câu trả lời cuối cùng cho Windows.
paradroid 12/12/18

-1

Có vẻ như PushbONS có thể giải quyết vấn đề của bạn. Họ cho rằng bạn có thể thấy các thông báo bị bỏ lỡ của mình bằng tiện ích mở rộng Chrome của họ.

https://blog.pushbONS.com/2014/10/23/easily-access-your-recent-notifying-in-chrom/


Vui lòng đọc Cách giới thiệu phần mềm để biết thông tin tối thiểu và đề xuất về cách đề xuất phần mềm trên Super User. Để giữ cho câu trả lời của bạn hữu ích ngay cả khi (các) liên kết được cung cấp phá vỡ các chi tiết này nên được chỉnh sửa thành câu trả lời của bạn.
Tôi nói Phục hồi lại

Này, tốt đẹp. Tôi sẽ thử nó. Tôi thực sự đã sử dụng PushbONS, nhưng không biết về tiện ích mở rộng Chrome này.
paradroid

Dường như không thể tìm thấy tính năng này. Một thông báo xuất hiện và không có dấu vết của nó trong lịch sử của thông báo.
madprops

Tôi suy nghĩ lại câu hỏi và cái bẫy là cái này. Nếu điện thoại của bạn nhận được thông báo, PushbONS sẽ gửi nó đến máy tính để bàn của bạn và cho bạn biết bạn có thể có thông báo chưa đọc (bạn có thể đã thấy nó trên điện thoại hoặc những gì có bạn). Những trang web nào bạn nhận được thông báo chrome cho? Nếu có một ứng dụng cho nó, bạn luôn có thể cài đặt nó và sau đó bạn sẽ nhận được các thông báo từ PushbONS đến máy tính để bàn / máy tính xách tay / bất cứ thứ gì.
Social Organix Contentbrandmgmt

1
Tính năng "Thông báo" trong PushbONS chỉ để xem thông báo từ điện thoại Android của bạn trên máy tính để bàn và tương tự với iPhone nếu bạn có máy tính để bàn Mac. Nó không có gì để làm với các thông báo Chrome.
Boaz

-1

Nhờ câu trả lời của Corey ở trên và một ngày thứ bảy lười biếng với quá nhiều thời gian trên tay, giờ đây tôi có thể thấy danh sách các thông báo Chrome gần đây trong bảng điều khiển IDE của mình, nơi tôi thậm chí có thể nhấp vào URL.

Mã này là crappy và sử dụng heuristic thô vì tôi không có manh mối về cách chính xác để giải thích dữ liệu nhị phân.

Nhưng đó là một tấn còn hơn không. Ví dụ đầu ra (đoạn trích):

https://www.finanzen.net/nachricht/aktien/kw-9-tops-und-flops-der-tecdax-aktien-in-der-vergangenen-woche-7195100
https://images.finanzen.net/mediacenter/unsortiert/TecDAX_boerse_frankfurt0016_kl.jpg
So bewegten sich die Einzelwerte des TecDAX in der zurückliegenden Handelswoche.*
KW 9: Tops und Flops der TecDAX-Aktien in der vergangenen Woche
So bewegten sich die Einzelwerte des TecDAX in der zurückliegenden Handelswoche.
HideOnTheseRoutes
Home/Index;Article/News/Index
tag-7195100
NotificationIdentifier
1061622960{


https://www.youtube.com/watch?v=W-mlD_bYKdU&feature=push-u-sub&attr_tag=0SL8UpnrTOnTECxr%3A6
https://lh5.googleusercontent.com/-raJM5SITO34/AAAAAAAAAAI/AAAAAAAAAAA/UtLljlL4Wpc/s96-c-mo/photo.jpg
New from Market Moves
Trade Recap: $1,500 in PROFITS*˜
COuAyJGY4uACEAY=
attributionTag
0SL8UpnrTOnTECxr:6{
 from Market MovesTrade Recap: $1,500 in PROFITS

Mã Java xứng đáng đóng đinh:

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;




/**
 * v[1, 2019-03-02 13:00 UTC]
 *
 * by dreamspace-president.com
 */
final public class CrappyChromeNotificationHistoryReader {


    public static void main(final String[] args) {

        final File file = new File(
                "C:\\Users\\[YOUR_NAME_HERE]\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Platform Notifications\\000003.log");

        final List<ChromeNotificationStuff> notifications = obtainChromeNotificationStuff(file);
        for (ChromeNotificationStuff notification : notifications) {
            System.err.println();
            System.err.println(notification);
        }
        System.exit(0);
    }


    public static List<ChromeNotificationStuff> obtainChromeNotificationStuff(final File file) {

        final List<ChromeNotificationStuff> ret = new ArrayList<>();

        final List<DumbTokenList> listOfDumbTokenLists = doTheInsaneParsingThing(file);
        int instanceCounter = 0;
        for (DumbTokenList dtl : listOfDumbTokenLists) {

            final List<String> urls = new ArrayList<>();
            final List<String> texts = new ArrayList<>();

            for (String token : dtl.tokens) {
                if (token.startsWith("https://") || token.startsWith("http://")) {
                    urls.add(token);
                } else {
                    texts.add(token);
                }
            }


            // Remove unimportant URLs.
            for (int i = urls.size() - 1; i > 0; i--) {
                final String urlThis = urls.get(i);
                final int lenThis = urlThis.length();
                for (int ii = i - 1; ii >= 0; ii--) {
                    final String urlThat = urls.get(ii);
                    final int lenThat = urlThat.length();

                    if (lenThis > lenThat) {
                        if (urlThis.startsWith(urlThat)) {
                            final String removed = urls.remove(ii);
                            //                            System.err.println("\nREMOVED: " + removed + "\nKEPT   : " + urlThis); // because was better or equal
                            break;
                        }
                    } else {
                        if (urlThat.startsWith(urlThis)) {
                            final String removed = urls.remove(i);
                            //                            System.err.println("\nREMOVED: " + removed + "\nKEPT   : " + urlThat); // because was better or equal
                            break;
                        }
                    }

                }
            }

            ret.add(new ChromeNotificationStuff(instanceCounter, urls, texts));
            instanceCounter++;
        }

        ret.sort(null);

        return ret;
    }


    final public static class ChromeNotificationStuff implements Comparable<ChromeNotificationStuff> {


        private final int instanceCounter;
        final public List<String> urls;
        final public List<String> texts;


        private ChromeNotificationStuff(final int instanceCounter,
                                        final List<String> urls,
                                        final List<String> texts) {

            this.instanceCounter = instanceCounter;

            this.urls = Collections.unmodifiableList(urls);
            this.texts = Collections.unmodifiableList(texts);
        }


        public String toString() {

            final StringBuilder sb = new StringBuilder();
            for (String url : urls) {
                sb.append(url).append('\n');
            }
            for (String text : texts) {
                sb.append(text).append('\n');
            }
            return sb.toString();
        }


        @Override
        public int compareTo(final ChromeNotificationStuff o) { // Newest (= last) notifications first, please.

            return Integer.compare(o.instanceCounter, instanceCounter);
        }
    }




    final private static double MIN_LENGTH_DIFFERENCE_RATIO = 0.7;//0.9;
    final private static double MIN_REMAININGLINES_PERCENTAGEOF_ALLLINES = 0.2;




    final private static class DumbTokenList {


        final private static int MIN_LENGTH = 10; //6;
        final private static String[] EXTENSIONS = new String[] { ".jpg", ".jpeg", ".png", ".gif", ".html", ".htm", ".php" };
        final private static int MAX_EXTRA_CRAP_AFTER_EXTENSIONS = 3;
        final private static String SAFE_URL_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;="; // https://stackoverflow.com/a/1547940/3500521

        final private String originalText;
        final private List<String> tokens;


        private DumbTokenList(final String textWithBinaryCrap) {

            originalText = textWithBinaryCrap;

            final List<String> tokens = new ArrayList<>();

            final Consumer<String> addTokenButTryToDecrappifyExtensionsFirstAnTing = token -> {


                if (token.startsWith("ttps://") || token.startsWith("ttp://")) {
                    token = "h" + token;
                }


                final List<String> newTokens = new ArrayList<>();

                if (token.startsWith("http")) {
                    final int tokenLength = token.length();
                    boolean found = false;
                    for (int i = 0; i < tokenLength; i++) {
                        final char c = token.charAt(i);
                        if (SAFE_URL_CHARACTERS.indexOf(c) < 0) {
                            newTokens.add(token.substring(0, i));
                            newTokens.add(token.substring(i));
                            found = true;
                            break;
                        }
                    }
                    if (!found) {
                        newTokens.add(token);
                    }
                } else {
                    newTokens.add(token);
                }

                for (String newToken : newTokens) {


                    String foundExt = null;
                    int foundExtLen = 0;
                    int foundExtAt = -1;
                    for (String extension : EXTENSIONS) {
                        final int idx = newToken.indexOf(extension);
                        if (idx >= 0) {
                            final int extLen = extension.length();
                            if (idx > foundExtAt || (idx == foundExtAt && extLen > foundExtLen)) {
                                foundExt = extension;
                                foundExtLen = extLen;
                                foundExtAt = idx;
                            }
                        }
                    }
                    if (foundExt != null) {
                        final int amountOfCharactersAfterThisFind = newToken.length() - foundExtAt - foundExtLen;
                        if (amountOfCharactersAfterThisFind <= MAX_EXTRA_CRAP_AFTER_EXTENSIONS) {
                            // OK. Shorten this bitch.
                            newToken = newToken.substring(0, foundExtAt + foundExtLen);
                        }
                    }


                    if (newToken.startsWith("http")) {
                        if (!newToken.startsWith("http://") && !newToken.startsWith("https://")) {
                            continue;
                        }
                    }


                    if (newToken.startsWith("/watch?v=")) {
                        newToken = "https://www.youtube.com" + newToken;
                    }


                    if (newToken.length() >= MIN_LENGTH) {
                        tokens.add(newToken);
                    }


                }

            };

            final StringBuilder sb = new StringBuilder();

            final int len = textWithBinaryCrap.length();
            for (int i = 0; i <= len + 1; i++) {

                final char c = i < len ? textWithBinaryCrap.charAt(i) : 0;

                if (c < ' ' || c == '"') {

                    String potentialText = sb.toString();
                    while (true) {
                        final int httpIDX = potentialText.indexOf("http", 1);
                        if (httpIDX < 0) {
                            addTokenButTryToDecrappifyExtensionsFirstAnTing.accept(potentialText);
                            break;
                        } else {
                            final String snippet = potentialText.substring(0, httpIDX);
                            potentialText = potentialText.substring(httpIDX);
                            addTokenButTryToDecrappifyExtensionsFirstAnTing.accept(snippet);
                        }
                    }

                    sb.setLength(0);

                    if (c == '"') {
                        // Skip this and the next. (thus "i < len +1")
                        i++;
                    }
                } else {
                    sb.append(c);
                }
            }


            // Remove quasi-duplicates. Sue me.
            //            System.err.println("\n*** STARTING DEDUPLICATION ***");
            final int lSize = tokens.size();
            for (int i = lSize - 1; i > 0; i--) { // (not 0 itself, wouldn't make sense)

                if (i < tokens.size()) {

                    final String entry = tokens.get(i);

                    for (int ii = i - 1; ii >= 0; ii--) { // (incl. 0)

                        final String otherEntry = tokens.get(ii);

                        final Boolean removeNoneOrFirstOrSecond = areLinesTooSimilar(entry, otherEntry);
                        if (removeNoneOrFirstOrSecond != null) {

                            if (!removeNoneOrFirstOrSecond) {
                                final String removed = tokens.remove(i);
                                //                                System.err.println("\nREMOVED: " + removed + "\nKEPT   : " + otherEntry); // because was better or equal
                            } else {
                                final String removed = tokens.remove(ii);
                                //                                System.err.println("\nREMOVED: " + removed + "\nKEPT   : " + entry); // because was better or equal
                            }
                            break; // IMPORTANT!
                        }

                    }
                }
            }


            this.tokens = Collections.unmodifiableList(tokens);

        }


        public String toString() {

            final StringBuilder sb = new StringBuilder();
            for (String token : tokens) {
                sb.append(token).append('\n');
            }
            return sb.toString();
        }


    }


    /**
     * Do NOT call with NULL/EMPTY arguments.
     *
     * @return NULL if not too similar. False if the FIRST seems superfluous. True if the SECOND seems superfluous.
     */
    private static Boolean areLinesTooSimilar(final String line1,
                                              final String line2) {

        final int l1 = line1.length();
        final int l2 = line2.length();

        final double lenDiffRatio = Math.min(l1, l2) / (double) Math.max(l1, l2); // Results in 1 or less.

        if (lenDiffRatio >= MIN_LENGTH_DIFFERENCE_RATIO) {

            if (l2 < l1) {
                // Compare the other way round.
                if (line1.contains(line2)) {
                    return false;
                }
            } else {
                if (line2.contains(line1)) {
                    return true;
                }
            }

        }

        return null;
    }


    private static List<DumbTokenList> doTheInsaneParsingThing(final File file) {

        final List<DumbTokenList> ret = new ArrayList<>();

        final StringBuilder sb = new StringBuilder();
        try (final InputStream is = new BufferedInputStream(new FileInputStream(file))) {

            final int bufMinus1 = 4;
            final Charset charset = Charset.forName("Cp1252"); // =ansi

            final int[] buf = new int[bufMinus1 + 1]; // "DATA"
            //            while ((buf[buf.length - 1] = is.read()) >= 0) {
            while (true) {

                buf[bufMinus1] = is.read();

                if (buf[bufMinus1] < 0 || (
                        buf[0] == 'D' &&
                                buf[1] == 'A' &&
                                buf[2] == 'T' &&
                                buf[3] == 'A' &&
                                buf[4] == ':')) {

                    if (sb.length() > 0) {
                        ret.add(new DumbTokenList(sb.toString()));
                        sb.setLength(0);
                    }

                    if (buf[bufMinus1] < 0) {
                        break;
                    }

                } else {

                    sb.append(new String(new byte[] { (byte) buf[bufMinus1] }, charset));
                    //                    sb.append((char) buf[bufMinus1]);
                }


                // Shift minibuffer to front.
                for (int i = 0; i < bufMinus1; i++) {
                    buf[i] = buf[i + 1];
                }
            }


        } catch (IOException e) {
            e.printStackTrace();
        }


        // DEDUPLICATE DTLs
        for (int i = ret.size() - 1; i > 0; i--) {

            if (i < ret.size()) {
                final DumbTokenList dtlThis = ret.get(i);
                final int dtlThisTokenCount = dtlThis.tokens.size();

                for (int ii = i - 1; ii >= 0; ii--) {
                    final DumbTokenList dtlThat = ret.get(ii);
                    final int dtlThatTokenCount = dtlThat.tokens.size();


                    int scoreViaRemainingLines_this = dtlThisTokenCount;
                    int scoreViaRemainingLines_that = dtlThatTokenCount;


                    for (int o = 0; o < dtlThisTokenCount; o++) {
                        final String tokenThis = dtlThis.tokens.get(o);
                        for (int oo = 0; oo < dtlThatTokenCount; oo++) {
                            final String tokenThat = dtlThat.tokens.get(oo);

                            final Boolean tooSimilar = areLinesTooSimilar(tokenThis, tokenThat);
                            if (tooSimilar != null) {
                                scoreViaRemainingLines_this--;
                                scoreViaRemainingLines_that--;
                                break;
                            }

                        }
                    }

                    if (scoreViaRemainingLines_this < 0 || scoreViaRemainingLines_that < 0) {
                        throw new Error();
                    }

                    final double scoreActual_this = scoreViaRemainingLines_this / (double) dtlThisTokenCount;
                    final double scoreActual_that = scoreViaRemainingLines_that / (double) dtlThatTokenCount;


                    if (scoreViaRemainingLines_this < scoreViaRemainingLines_that) {
                        if (scoreActual_this < MIN_REMAININGLINES_PERCENTAGEOF_ALLLINES) {
                            final DumbTokenList removed = ret.remove(i);
                            //                            System.err.println("\nREMOVED:\n" + removed + "\nKEPT   :\n" + dtlThat);
                            break; // IMPORTANT.
                        }
                    } else {
                        if (scoreActual_that < MIN_REMAININGLINES_PERCENTAGEOF_ALLLINES) {
                            final DumbTokenList removed = ret.remove(ii);
                            //                            System.err.println("\nREMOVED:\n" + removed + "\nKEPT   :\n" + dtlThis);
                            break; // IMPORTANT.
                        }
                    }


                }

            }
        }

        return ret;
    }


}

1
Để chạy được điều này, tôi đã sử dụng các lệnh sau, javac "C:\Users\MLM\Downloads\CrappyChromeNotificationHistoryReader.java"(để biên dịch), java -cp C:\Users\MLM\Downloads CrappyChromeNotificationHistoryReader(để chạy) Tập lệnh bị lỗi if (scoreViaRemainingLines_this < 0 || scoreViaRemainingLines_that < 0) {vì vậy tôi đã nhận xét tất cả phân tích cú pháp doTheInsaneParsingThingvà chỉ in ra mọi thứ System.out.println(sb.toString());khi mã thông báo được thêm vào danh sách. Có vẻ như "Thông báo nền tảng" chỉ xử lý các thông báo đẩy nhân viên máy chủ.
MLM

@MLM: Cảm ơn thông tin javac. Đối với vấn đề: Hoạt động với tôi nếu tôi dán nguồn vào dự án IntelliJ Java 8 đang mở, đặt tên người dùng (biến "tệp") và chạy mã.
Chủ tịch Dreamspace
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.