Czy jest jakiś sposób przeglądania historii powiadomień przeglądarki Chrome?

55

Otrzymuję powiadomienia Chrome z kilku witryn i działają one, gdy nie mam nawet otwartych kart dla tych witryn.

Ale czasami otrzymuję te powiadomienia Chrome, gdy nie jestem przy biurku ani nie patrzę na laptopa.

Ponieważ niektóre z tych powiadomień są dla mnie przydatne, chciałbym mieć dostęp do tych, które przegapiłem.

Czy istnieje sposób na przejrzenie historii powiadomień?

paradroid
źródło
1
Nie wygląda na to. Patrząc na ten post ( theverge.com/2015/10/14/9531133/… ), zmienili zasady dotyczące powiadomień i usunęli go z komputera, aby umieścić go na poszczególnych stronach internetowych. Jedyną rzeczą, aby uzyskać dostęp do nowych powiadomień, jest kliknięcie dzwonka na stronie google.
Terry
1
Wygląda na to, że nie: productforums.google.com/forum/#!msg/chrome/xs9PflHTfho/… - bardzo niefortunnie.
LB--
Jedynym miejscem, w którym znalazłem powiadomienia jako listę, jest to, że witryna, która je zwalnia, ma je za pośrednictwem swojej witryny. Wygląda na to, że Chrome ich nie gromadzi chrome://notificationsi nie trafiają do systemu operacyjnego.
Jason Lydon
Zaakceptuj poprawną odpowiedź @paradroid
Satheesh

Odpowiedzi:

31

Jeśli masz komputer Mac, istnieje sposób! 😄

Oto jak wyglądałaby lista powiadomień:

Oto jak wyglądałaby lista powiadomień.

Wszystko, co musisz zrobić, to:

1. W chrome przejdź do:

chrome://flags/

2. Poszukaj:

Enable native notifications. Mac

3. Włącz, uruchom ponownie Chrome, gotowe. Cieszyć się!

EDYTOWAĆ:

  • Być może nie będziesz już musiał robić powyższego.

Począwszy od Chrome 59, powiadomienia wysyłane za pośrednictwem interfejsu API powiadomień lub interfejsu API rozszerzeń chrome.notifications będą wyświetlane bezpośrednio przez system powiadomień macOS zamiast własnego systemu Chrome. [ źródło ]

Esdras Lopez
źródło
2
To nie odpowiada na pytanie, czy widzisz historię powiadomień, tylko widzisz powiadomienia.
Bjorn,
6
@BjornTipling To odpowiada. Pyta, czy może zobaczyć powiadomienia, które przegapił podczas nieobecności, a moja metoda właśnie to robi.
Esdras Lopez
1
Jeśli umieścisz linki jako komentarze, dodam je do twojego posta dla ciebie, @EsdrasLopez
user418150
1
@ user418150 Doceniam to, ale teraz mam reputację. :) Sprawdź zmiany.
Esdras Lopez
2
Głównym problemem jest to, że przechowuje powiadomienie tylko wtedy, gdy go nie klikniesz. Kilka razy kliknąłem interesujący tytuł artykułu, tylko po to, by się nie ładował, jednak nadal został usunięty z listy powiadomień. Zazwyczaj artykuły są zbyt nowe, aby można je było przeglądać w Google, a często tytuł powiadomienia nie pasuje do tytułu artykułu, więc gubi się w trzewiach sieci.
iBorg,
11

W MacOSX będziesz mieć katalog Chrome znajdujący się w bibliotece / Obsługa aplikacji. Otwórz aplikację terminala i uruchom kolejne polecenia:

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

Teraz zobaczysz takie pliki:

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

Możesz zobaczyć najnowszy to 000003.log, więc sprawdź to następną komendą:

tail -n 100 000003.log

I zobaczysz ostatnie 100 pozycji z tego dziennika. Następnie możesz otworzyć ustawienia Chrome i wyłączyć powiadomienie na stronie.

Pamiętaj, że jeśli masz kilka profili w chrome, twoja ścieżka może być inna, na przykład ta (Profil1 zamiast Domyślny):

cd ~/Library/Application\ Support/Google/Chrome/Profile\ 1/Platform\ Notifications/
Andrey Bezpalenko
źródło
3
To powinna być zaakceptowana odpowiedź. :)
Cody A. Ray
1
Nadal działa w 2019 r. (Choć dziennik wymaga trochę interpretacji). Świetna odpowiedź dzięki
carpii
11

Jeśli przejdziesz do %LocalAppData%\Google\Chrome\User Data\Default\Platform Notifications, istnieje plik dziennika poprzednich powiadomień.

Corey
źródło
4
dobrze, ale rozważ podanie ścieżki jako „% LocalAppData% \ Google \ Chrome \ User Data \ Default \ Platform Notifications” zamiast twardego kodu. Doskonale działa na każdym komputerze.
Dmitrij Gusarow
W UserData / -folder może trzeba zlokalizować folder profilu pierwsze, takie jak "C: \ Users \ nazwa_użytkownika \ AppData \ Local \ Google \ Chrome \ UserData \ profile 1 \ Platforma Powiadomienia"
Maffelu
1
Te dane są binarne. Jak to przeczytać?
Gaia
W Chrome 71 plik dziennika jest pusty. Czy to kiedyś zostało wyłączone?
James
2
@ Gaia Zastanawiałem się nad tym samym i po prostu wymieszałem trochę gównianego kodu Java, który wykonuje zadowalającą robotę przy odszyfrowywaniu większości tego kodu. Opublikowałem to poniżej: superuser.com/a/1410742/778383
Dreamspace President
3

Ponieważ wydaje się, że nie można uzyskać bezpośredniego zapisu powiadomień, gdybym miał ten sam problem, oszukiwałbym, używając emulatora telefonu z Androidem lub telefonu, jako użytkownik, który polecił Pushbullet. Ale jest nie tylko Pushbullet, istnieje wiele innych aplikacji, moglibyśmy omówić sztuczki z Androidem, aby słuchać i nagrywać powiadomienia, w osobnym wątku.

Jeśli jesteś programistą, być może możesz rozwiązać swój problem za pomocą domowego rozszerzenia:

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

„Możesz podpiąć funkcję webkitNotifications.createNotification, aby za każdym razem, gdy tworzone jest powiadomienie, uruchamiałeś określony kod”.

Quidam
źródło
2

Możesz zobaczyć historię powiadomień push. W prawym dolnym rogu ekranu komputera na pasku zadań znajduje się coś, co wygląda jak dymek, a po najechaniu myszą zobaczysz, że nazywa się to „powiadomieniem”. Kliknięcie tego bąbelka spowoduje wyświetlenie nieprzeczytanych / nowych wiadomości e-mail oraz powiadomień push, których nie odrzucono. Przyszedłem tutaj, szukając tej odpowiedzi i nie znalazłem jej, ale potem udało mi się to wypracować. Korzystam z systemu Windows 10.

Shea Bethell
źródło
Tak, jest to ostatnia rzecz w Win10, ale jest to ostateczna odpowiedź dla systemu Windows.
paradroid
1

Dotykając czegoś, co zostało wspomniane nieco powyżej, ale z pewnym zwrotem, który zapewnia, że ​​nie przegapisz powiadomienia w OSX:

  1. Po prawej stronie głównego górnego paska kliknij ikonę powiadomienia.

  2. Kliknij koło zębate (w prawym dolnym rogu ekranu powiadomień)

  3. Wybierz Chrome, aby skonfigurować sposób wyświetlania powiadomień.

  4. Domyślnie wybrane są „Banery”, które mogą zniknąć automatycznie. Zamiast tego wybierz typ „Alert”, a pozostaną tam tak długo, jak długo ich nie potwierdzasz!

Zapraszamy :)

Patrick St-Onge
źródło
-1

Wygląda na to, że Pushbullet może rozwiązać Twój problem. Twierdzą, że możesz zobaczyć swoje nieodebrane powiadomienia za pomocą rozszerzenia Chrome.

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

Socialorganix Contentbrandmgmt
źródło
Przeczytaj Jak polecać oprogramowanie, aby uzyskać minimalne wymagane informacje i sugestie, jak polecać oprogramowanie superużytkownikowi. Aby Twoja odpowiedź była użyteczna, nawet jeśli podany link (y) się zepsuje, te dane powinny być edytowane w odpowiedzi.
Mówię: Przywróć Monikę
Hej, miło. Spróbuję tego. Właściwie już używam Pushbulleta, ale nie wiedziałem o tym rozszerzeniu Chrome.
paradroid
Nie można znaleźć tej funkcji. Powiadomienie wyskoczyło i nie ma jego śladu w historii powiadomień.
madprops
Zastanowiłem się nad pytaniem i jest to haczyk. Jeśli telefon otrzyma powiadomienie, pushbullet dostarczy je na pulpit i poinformuje, że masz prawdopodobnie nieprzeczytane powiadomienia (być może widziałeś je na telefonie lub czymś innym). Dla jakich witryn otrzymujesz powiadomienia chrom? Jeśli jest do tego aplikacja, zawsze możesz ją zainstalować, a następnie otrzymasz powiadomienia z pushbulleta na komputer stacjonarny / laptop / cokolwiek innego.
Socialorganix Contentbrandmgmt
1
Funkcja „Powiadomienia” w aplikacji Pushbullet służy tylko do wyświetlania powiadomień z telefonu z Androidem na pulpicie, i to samo z iPhone'em, jeśli masz komputer Mac. Nie ma to nic wspólnego z powiadomieniami Chrome.
Boaz
-1

Dzięki Corey „s odpowiedzi powyżej, a leniwe sobotę zbyt wiele czasu na moje ręce, mogę teraz zobaczyć listę ostatnich powiadomień Chrome w konsoli mojego IDE, gdzie mogę nawet kliknąć na adresach URL.

Kod jest kiepski i używa prymitywnej heurystyki, ponieważ nie mam pojęcia, jak poprawnie interpretować dane binarne.

Ale to o wiele więcej niż nic. Przykładowe dane wyjściowe (fragment):

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

Kod Java godny ukrzyżowania:

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


}
Prezydent Dreamspace
źródło
1
Aby uruchomić to, użyłem następujących poleceń, javac "C:\Users\MLM\Downloads\CrappyChromeNotificationHistoryReader.java"(aby skompilować), java -cp C:\Users\MLM\Downloads CrappyChromeNotificationHistoryReader(aby uruchomić) Skrypt się nie udał, if (scoreViaRemainingLines_this < 0 || scoreViaRemainingLines_that < 0) {więc skomentowałem całą analizę doTheInsaneParsingThingi po prostu wydrukowałem wszystko, System.out.println(sb.toString());kiedy token zostanie dodany do listy. Wygląda na to, że „Powiadomienia platformy” obsługują tylko powiadomienia wypychające pracownika serwera.
MLM
@MLM: Dzięki za informacje o javac. Co do problemu: działa dla mnie, jeśli wkleję źródło do otwartego projektu IntelliJ Java 8, wstawię moją nazwę użytkownika (zmienną „file”) i uruchomię kod.
Prezydent Dreamspace