Apakah ada cara untuk melihat riwayat pemberitahuan browser Chrome?

57

Saya mendapatkan pemberitahuan Chrome dari beberapa situs web dan berfungsi ketika saya bahkan tidak memiliki tab yang terbuka untuk situs tersebut.

Tetapi kadang-kadang saya mendapatkan pemberitahuan Chrome ini ketika saya tidak di meja saya atau melihat laptop saya.

Karena beberapa pemberitahuan ini berguna bagi saya, saya ingin dapat mengakses semua yang saya lewatkan.

Apakah ada cara untuk melihat riwayat notifikasi?

paradroid
sumber
1
Sepertinya tidak. Melihat posting ini ( theverge.com/2015/10/14/9531133/... ), mereka menyusun kembali kebijakan pemberitahuan mereka dan menghapusnya dari desktop untuk meletakkannya di masing-masing halaman web. Satu-satunya hal untuk mengakses notifikasi baru adalah dengan mengklik bel pada halaman google.
Terry
1
Sepertinya tidak ada: productforums.google.com/forum/#!msg/chrome/xs9PflHTfho/… - sangat disayangkan.
LB--
Satu-satunya tempat saya menemukan notifikasi sebagai daftar adalah jika situs web yang memecatnya memiliki mereka melalui situs web mereka. Chrome tampaknya tidak mengumpulkan mereka dalam sesuatu seperti chrome://notificationsdan mereka tidak berhasil masuk ke OS.
Jason Lydon
Terima jawaban yang valid @paradroid
Satheesh

Jawaban:

31

Jika Anda memiliki Mac, ada caranya! 😄

Begini tampilannya daftar pemberitahuan:

Begini tampilan daftar notifikasi.

Yang harus Anda lakukan adalah:

1. Di chrome, buka:

chrome://flags/

2. Cari:

Enable native notifications. Mac

3. Aktifkan, restart krom, Anda selesai. Nikmati!

SUNTING:

  • Anda mungkin tidak perlu melakukan hal di atas lagi.

Mulai di Chrome 59, pemberitahuan yang dikirim melalui API Pemberitahuan atau API ekstensi chrome. Pemberitahuan akan ditampilkan langsung oleh sistem pemberitahuan asli macOS alih-alih sistem Chrome sendiri. [ sumber ]

Esdras Lopez
sumber
2
Ini tidak menjawab pertanyaan melihat riwayat pemberitahuan, hanya melihat pemberitahuan.
Bjorn
6
@ JacornTipling Itu menjawabnya. Dia bertanya apakah dia bisa melihat pemberitahuan yang dia lewatkan saat pergi dan metode saya melakukan hal itu.
Esdras Lopez
1
Jika Anda meletakkan tautan sebagai komentar, saya akan menambahkannya ke posting Anda untuk Anda, @EsdrasLopez
user418150
1
@ user418150 Saya menghargai itu, tapi saya mendapatkan reputasi sekarang. :) Periksa hasil edit.
Esdras Lopez
2
Masalah utama di sini adalah ia hanya menyimpan notifikasi jika Anda tidak mengkliknya. Beberapa kali saya mengklik judul artikel yang menarik, tetapi gagal memuat, namun tetap dihapus dari daftar notifikasi. Biasanya artikel terlalu baru untuk di-Google dan sering kali judul notifikasi tidak cocok dengan judul artikel, sehingga hilang di perut web.
iBorg
13

Pada MacOSX Anda akan memiliki direktori Chrome yang terletak di Dukungan Perpustakaan / Aplikasi. Buka aplikasi terminal dan jalankan perintah berikutnya:

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

Sekarang Anda akan melihat file seperti ini:

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

Anda dapat melihat yang terbaru adalah 000003.log, jadi periksalah dengan perintah berikut:

tail -n 100 000003.log

Dan Anda akan melihat 100 item terakhir dari log ini. Kemudian Anda dapat membuka pengaturan chrome dan menonaktifkan pemberitahuan situs web itu.

Perhatikan bahwa jika Anda memiliki beberapa profil di chrome, jalur Anda dapat berbeda, seperti ini (Profile1 bukannya Default):

cd ~/Library/Application\ Support/Google/Chrome/Profile\ 1/Platform\ Notifications/
Andrey Bezpalenko
sumber
3
Ini harus menjadi jawaban yang diterima. :)
Cody A. Ray
1
Masih bekerja pada 2019 (walaupun log membutuhkan sedikit interpretasi). Jawaban bagus terima kasih
carpii
12

Jika Anda pergi ke %LocalAppData%\Google\Chrome\User Data\Default\Platform Notifications, ada file log pemberitahuan sebelumnya.

Corey
sumber
4
bagus, tetapi pertimbangkan menentukan jalur sebagai "% LocalAppData% \ Google \ Chrome \ Data Pengguna \ Default \ Platform Notification" alih-alih hardcode. Ini bekerja dengan baik pada PC apa pun.
Dmitry Gusarov
Dalam UserData / -folder Anda mungkin harus menemukan folder profil Anda terlebih dahulu, seperti "C: \ Users \ username \ AppData \ Local \ Google \ Chrome \ UserData \ Profile 1 \ Platform Notification"
Maffelu
1
Data ini adalah biner. Bagaimana cara membacanya?
Gaia
Di Chrome 71, dan file log kosong. Apakah ini dinonaktifkan di beberapa titik?
James
3
@ Gaia Saya bertanya-tanya hal yang sama dan hanya menyiapkan beberapa kode Java jelek yang melakukan pekerjaan yang dapat diterima untuk menguraikan sebagian besar. Saya mempostingnya di bawah ini: superuser.com/a/1410742/778383
Dreamspace President
3

Karena sepertinya tidak mungkin untuk mendapatkan catatan pemberitahuan secara langsung, jika saya memiliki masalah yang sama, saya akan menipu dengan menggunakan emulator ponsel android, atau telepon, sebagai pengguna yang merekomendasikan Pushbullet. Tapi tidak hanya Pushbullet, ada banyak aplikasi lain, kita bisa mendiskusikan trik android untuk mendengarkan dan merekam notifikasi, di utas terpisah.

Jika Anda seorang programmer, Anda mungkin bisa menyelesaikan masalah Anda melalui ekstensi buatan sendiri:

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

"Anda dapat mengaitkan fungsi webkitNotifications.createNotification sehingga setiap kali pemberitahuan dibuat Anda menjalankan beberapa kode tertentu."

Quidam
sumber
2

Menyentuh sesuatu yang disebutkan sedikit di atas tetapi dengan twist yang memastikan Anda tidak melewatkan pemberitahuan di OSX:

  1. Di sisi kanan bilah atas utama, klik ikon pemberitahuan.

  2. Klik roda gigi (kanan bawah tampilan notifikasi)

  3. Pilih Chrome untuk menyiapkan cara pemberitahuan ditampilkan.

  4. Secara default "Banners" dipilih dan mereka dapat menghilang secara otomatis. Alih-alih, pilih jenis "Peringatan" dan mereka akan tinggal di sana selama Anda tidak mengakui mereka!

Sama sama :)

Patrick St-Onge
sumber
2

Anda dapat melihat riwayat Pemberitahuan Push. Di sudut kanan bawah layar PC Anda pada taskbar adalah apa yang tampak seperti gelembung ucapan dan jika Anda mengarahkannya, Anda akan melihatnya sebenarnya disebut "notifikasi". Jika Anda mengklik gelembung itu, itu akan menampilkan email yang belum dibaca / baru dan pemberitahuan push yang belum Anda abaikan. Saya datang ke sini mencari jawaban ini dan tidak menemukannya tetapi kemudian berhasil menyelesaikannya. Saya menggunakan Windows 10.

Shea Bethell
sumber
Ya, ini adalah hal terbaru pada Win10, tetapi ini adalah jawaban akhirnya untuk Windows.
paradroid
-1

Sepertinya Pushbullet dapat menyelesaikan masalah Anda. Mereka mengklaim Anda dapat melihat notifikasi yang terlewat menggunakan ekstensi Chrome mereka.

https://blog.pushbullet.com/2014/10/23/easily-access-your-recent-notifications-in-chrome/

Socialorganix Contentbrandmgmt
sumber
Silakan baca Cara merekomendasikan perangkat lunak untuk informasi minimum yang diperlukan dan saran tentang cara merekomendasikan perangkat lunak pada Pengguna Super. Agar jawaban Anda bermanfaat bahkan jika tautan yang disediakan memecah detail ini harus diedit ke dalam jawaban Anda.
Saya katakan Reinstate Monica
Hei bagus Saya akan mencobanya. Saya sebenarnya sudah menggunakan Pushbullet, tetapi tidak mengetahui ekstensi Chrome ini.
paradroid
Tampaknya tidak dapat menemukan fitur ini. Pemberitahuan muncul dan tidak ada jejaknya di riwayat pemberitahuan itu.
madprops
Saya memikirkan kembali pertanyaannya dan hasilnya adalah ini. Jika ponsel Anda mendapat notifikasi, pushbullet akan mengirimkannya ke desktop Anda dan memberi tahu Anda bahwa Anda mungkin memiliki notifikasi yang belum dibaca (Anda mungkin telah melihatnya di ponsel Anda atau apa pun). Untuk situs apa Anda mendapatkan pemberitahuan chrome? Jika ada aplikasi untuk itu, Anda selalu dapat menginstalnya dan Anda akan mendapatkan notifikasi dari pushbullet ke desktop / laptop / apa pun.
Socialorganix Contentbrandmgmt
1
Fitur "Notifikasi" di Pushbullet hanya untuk melihat notifikasi dari ponsel Android Anda di desktop, dan sama dengan iPhone jika Anda memiliki desktop Mac. Ini tidak ada hubungannya dengan pemberitahuan Chrome.
Boaz
-1

Berkat jawaban Corey di atas, dan Sabtu yang malas dengan terlalu banyak waktu di tangan saya, sekarang saya dapat melihat daftar pemberitahuan Chrome baru-baru ini di konsol IDE saya, di mana saya bahkan dapat mengklik URL.

Kode ini jelek dan menggunakan heuristik kasar karena saya tidak tahu cara yang benar untuk menafsirkan data biner.

Tapi satu ton lebih baik daripada tidak sama sekali. Contoh output (kutipan):

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

Kode Java penyaliban-layak:

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;
    }


}
Presiden Dreamspace
sumber
1
Untuk menjalankan ini, saya menggunakan perintah berikut, javac "C:\Users\MLM\Downloads\CrappyChromeNotificationHistoryReader.java"(untuk mengkompilasi), java -cp C:\Users\MLM\Downloads CrappyChromeNotificationHistoryReader(untuk menjalankan) Script gagal if (scoreViaRemainingLines_this < 0 || scoreViaRemainingLines_that < 0) {sehingga saya berkomentar semua parsing doTheInsaneParsingThingdan hanya mencetak semuanya System.out.println(sb.toString());ketika token ditambahkan ke daftar. Sepertinya "Pemberitahuan Platform" hanya menangani pemberitahuan push pekerja server.
MLM
@ MLM: Terima kasih atas info javac. Adapun masalah: Berfungsi untuk saya jika saya tempel sumber ke proyek Java 8 IntelliJ terbuka, masukkan nama pengguna saya ("file" variabel), dan jalankan kode.
Dreamspace President