Jump to content

ArcticFoxie/NotHereToPlayGames -- 360Chrome v13.5.1030 Redux


Recommended Posts

10 hours ago, NotHereToPlayGames said:

You can't use just "any" icudtl.dat file HOWEVER the files between 1030, 2022, 2036, and 2044 are interchangeable (limited testing, 360Chrome won't launch if incompatible).

So you can use the larger file from 2044 and replace the smaller file in 1030 and your de-DE may be what you are wanting.

With the icudtl.dat of 13.5.2036, the date is displayed correctly on 13.5.1030.
Is there another "smaller" one I could try?

Or can the icudtl.dat be edited?

Link to comment
Share on other sites


Actually, I think something else might be going on and you should be able to keep the smaller icudtl.dat.

The German trustedshops.de website pulls javascript from profiles.trustedshops.com

Are you blocking the javascript coming from the .com ?

The German website displays the time-and-date in German format and after a few seconds it is the .com javascript files that convert that display.

For some reason, that javascript is not detecting your language preference correctly and the icudtl.dat is perhaps falling back to a default?

 

image.thumb.png.6c930f0b9850d18bee809549071709c8.png

Edited by NotHereToPlayGames
Link to comment
Share on other sites

1 hour ago, NotHereToPlayGames said:

Actually, I think something else might be going on and you should be able to keep the smaller icudtl.dat.

The German trustedshops.de website pulls javascript from profiles.trustedshops.com

Are you blocking the javascript coming from the .com ?

The German website displays the time-and-date in German format and after a few seconds it is the .com javascript files that convert that display.

For some reason, that javascript is not detecting your language preference correctly and the icudtl.dat is perhaps falling back to a default?

 

It works with Javscript deactivated.
But I have another page which does not work with Javascript deactivated.
I'll leave the larger icudtl.dat.
Presumably something has been left out here that is important for Javascript.

...
There are other problems with the smaller icudtl.dat.
I have problems with input fields, which are probably also "monitored" with Javascript.
If I enter "1,2" for a value, it is immediately changed to "1.2" and the website reports an error that the value is in the wrong format.

Edited by Anbima
Link to comment
Share on other sites

  • 3 weeks later...

found some issues with this polyfill.
-----------------------------------------------------------
// ==UserScript==
// @name Inject structuredClone() Polyfill (98)
// @version 0.0.1
// @match *://*/*
// @run-at document-start
// @grant none
// ==/UserScript==

if (typeof self.structuredClone !== "function") {
  self.structuredClone = function (value) {
    if (Array.isArray(value)) {
      const count = value.length;
      let arr = new Array(count);
      for (let i = 0; i < count; i++) {
        arr = self.structuredClone(value);
      }
      return arr;
    } else if (typeof value === "object") {
        let obj = {};
        for (const prop in value) {
          obj[prop] = self.structuredClone(value[prop]);
        }
        return obj;
    } else {
        return value;
    }
  }
}

----------------------------------------------------------------
had to add this to get some sites to work.

// @exclude https://*.whatsapp.com/*
// @exclude https://*.instagram.com/*
// @exclude https://*.facebook.com/*
------------------------------------------------------------------

without the exclude tags the below sites load blank.

faq.whatsapp.com
instagram.com
facebook.com/watch

not that i use those sites but something in this polyfill is affecting the above pages.
who knows what other sites have issues with it.
can the polyfill be improved other then adding the exclude tags?

Edited by rereser
Link to comment
Share on other sites

I'd only use such limited polyfills on per-site basis to avoid issues. A more capable implementation of structuredClone polyfill:

'use strict';

const VOID       = -1;
const PRIMITIVE  = 0;
const ARRAY      = 1;
const OBJECT     = 2;
const DATE       = 3;
const REGEXP     = 4;
const MAP        = 5;
const SET        = 6;
const ERROR      = 7;
const BIGINT     = 8;
// const SYMBOL = 9;

const EMPTY = '';

const {toString} = {};
const {keys} = Object;

const typeOf = value => {
  const type = typeof value;
  if (type !== 'object' || !value)
    return [PRIMITIVE, type];

  const asString = toString.call(value).slice(8, -1);
  switch (asString) {
    case 'Array':
      return [ARRAY, EMPTY];
    case 'Object':
      return [OBJECT, EMPTY];
    case 'Date':
      return [DATE, EMPTY];
    case 'RegExp':
      return [REGEXP, EMPTY];
    case 'Map':
      return [MAP, EMPTY];
    case 'Set':
      return [SET, EMPTY];
  }

  if (asString.includes('Array'))
    return [ARRAY, asString];

  if (asString.includes('Error'))
    return [ERROR, asString];

  return [OBJECT, asString];
};

const shouldSkip = ([TYPE, type]) => (
  TYPE === PRIMITIVE &&
  (type === 'function' || type === 'symbol')
);

const serializer = (strict, json, $, _) => {

  const as = (out, value) => {
    const index = _.push(out) - 1;
    $.set(value, index);
    return index;
  };

  const pair = value => {
    if ($.has(value))
      return $.get(value);

    let [TYPE, type] = typeOf(value);
    switch (TYPE) {
      case PRIMITIVE: {
        let entry = value;
        switch (type) {
          case 'bigint':
            TYPE = BIGINT;
            entry = value.toString();
            break;
          case 'function':
          case 'symbol':
            if (strict)
              throw new TypeError('unable to serialize ' + type);
            entry = null;
            break;
          case 'undefined':
            return as([VOID], value);
        }
        return as([TYPE, entry], value);
      }
      case ARRAY: {
        if (type)
          return as([type, [...value]], value);

        const arr = [];
        const index = as([TYPE, arr], value);
        for (const entry of value)
          arr.push(pair(entry));
        return index;
      }
      case OBJECT: {
        if (type) {
          switch (type) {
            case 'BigInt':
              return as([type, value.toString()], value);
            case 'Boolean':
            case 'Number':
            case 'String':
              return as([type, value.valueOf()], value);
          }
        }

        if (json && ('toJSON' in value))
          return pair(value.toJSON());

        const entries = [];
        const index = as([TYPE, entries], value);
        for (const key of keys(value)) {
          if (strict || !shouldSkip(typeOf(value[key])))
            entries.push([pair(key), pair(value[key])]);
        }
        return index;
      }
      case DATE:
        return as([TYPE, value.toISOString()], value);
      case REGEXP: {
        const {source, flags} = value;
        return as([TYPE, {source, flags}], value);
      }
      case MAP: {
        const entries = [];
        const index = as([TYPE, entries], value);
        for (const [key, entry] of value) {
          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))
            entries.push([pair(key), pair(entry)]);
        }
        return index;
      }
      case SET: {
        const entries = [];
        const index = as([TYPE, entries], value);
        for (const entry of value) {
          if (strict || !shouldSkip(typeOf(entry)))
            entries.push(pair(entry));
        }
        return index;
      }
    }

    const {message} = value;
    return as([TYPE, {name: type, message}], value);
  };

  return pair;
};

/**
 * @typedef {Array<string,any>} Record a type representation
 */

/**
 * Returns an array of serialized Records.
 * @param {any} value a serializable value.
 * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,
 *  if `true`, will not throw errors on incompatible types, and behave more
 *  like JSON stringify would behave. Symbol and Function will be discarded.
 * @returns {Record[]}
 */
const serialize = (value, {json, lossy} = {}) => {
  const _ = [];
  return serializer(!(json || lossy), !!json, new Map, _)(value), _;
};

const env = typeof self === 'object' ? self : globalThis;

const deserializer = ($, _) => {
  const as = (out, index) => {
    $.set(index, out);
    return out;
  };

  const unpair = index => {
    if ($.has(index))
      return $.get(index);

    const [type, value] = _[index];
    switch (type) {
      case PRIMITIVE:
      case VOID:
        return as(value, index);
      case ARRAY: {
        const arr = as([], index);
        for (const index of value)
          arr.push(unpair(index));
        return arr;
      }
      case OBJECT: {
        const object = as({}, index);
        for (const [key, index] of value)
          object[unpair(key)] = unpair(index);
        return object;
      }
      case DATE:
        return as(new Date(value), index);
      case REGEXP: {
        const {source, flags} = value;
        return as(new RegExp(source, flags), index);
      }
      case MAP: {
        const map = as(new Map, index);
        for (const [key, index] of value)
          map.set(unpair(key), unpair(index));
        return map;
      }
      case SET: {
        const set = as(new Set, index);
        for (const index of value)
          set.add(unpair(index));
        return set;
      }
      case ERROR: {
        const {name, message} = value;
        return as(new env[name](message), index);
      }
      case BIGINT:
        return as(BigInt(value), index);
      case 'BigInt':
        return as(Object(BigInt(value)), index);
    }
    return as(new env[type](value), index);
  };

  return unpair;
};

/**
 * @typedef {Array<string,any>} Record a type representation
 */

/**
 * Returns a deserialized value from a serialized array of Records.
 * @param {Record[]} serialized a previously serialized value.
 * @returns {any}
 */
const deserialize = serialized => deserializer(new Map, serialized)(0);

if (!("structuredClone" in env)) env.structuredClone = (any, options) => deserialize(serialize(any, options));

Source: https://github.com/ungap/structured-clone

Edited by UCyborg
Link to comment
Share on other sites

UCyborg, thank you very much!
did not know about the limitations with the previous one but this new structuredclone polyfill works.
no more need for the exclude tags i posted.
test here: https://www.measurethat.net/Benchmarks/Show/18967/0/structuredclone-test
still trying to figure out how you put this together from the github source but my knowledge is limited.
thanks again!

Link to comment
Share on other sites

The first one was the most limited, the one from ungap should be the middle ground, the most complete is the one from core-js. Do the read the notes as it is said structuredClone cannot be polyfilled in its entirety.

It's probably common for such code to be packaged in a way to be easily reusable in an environment not limited to a web browser and more easily maitainable/studiable by separating it into multiple smaller modules. The repo from ungap has it packaged in two ways (in order for it to be split in multiple modules), the one in cjs folder using CommonJS format usable outside of web browsers and the one in ecs folder using ECMAScript 6 standard's module imports using import/export in a web browser. Except I haven't heard of user scripts that are split into multiple modules, so going off from /ecs/index.js, I've put everything into one file, removing import/export and added the statement attaching the structuredClone function to the global object.

Link to comment
Share on other sites

On 11/24/2023 at 8:35 AM, D.Draker said:

You misunderstood the joke completely.

 

Those with high CPU oughta try h264ify extension, I think there were links at my account, sorry don't have them at hand right now.

Or download from github.

https://github.com/erkserkserks/h264ify

The h264ify extension is not there.Is there another source for it?

Link to comment
Share on other sites

  • 4 weeks later...

Im running 360Chrome v13.5.1030 Redux in a intel atom n270 160ghz -single core- the cpu usage sometings get stuck in 80%

there are some switches that can help? like --single-process

Link to comment
Share on other sites

Sad, but I get this feeling that NHTPG may not be updating 360 due to the fact that people are now so focused on Supermium; but I'm gonna continue to use 360Chrome v13.5.1030 Redux until it no longer works. I hope you get your gusto (enthusiasm) back and decide to continue with your project. This is a very good browser still.

Edited by XPerceniol
Link to comment
Share on other sites

I've only just started using Supermium, and while I think it's a miracle that a Chromium 121 based browser will run on XP, it's a long way from being a replacement for 360Chome for me as well.
The GUI font on Supermium is rough, not unusable but ugly.
It still has some stability problems, I find it crashes if I try to use the password manager, for instance.
I hate the fact that it closes when you close the last tab. You can stop that with a simple setting in 360Chrome.
Of course this can be achieved with an extension, I'm sure, but that's not the same!
On my system, which is quite powerful, Supermium is slow to start, and quite slow in use. 360Chrome is much better, and I'm using 13.5.2036, which is probably not as well optimised as v13.5.1030 Redux is now.
While it's good to have a fallback available if I run into a site which 360Chome no longer works properly with (there aren't many, but the number will inevitably increase, of course) I still wouln't use Supermium as my default browser yet.
:no:

Link to comment
Share on other sites

8 minutes ago, Dave-H said:

It still has some stability problems, I find it crashes if I try to use the password manager, for instance.
I hate the fact that it closes when you close the last tab. You can stop that with a simple setting in 360Chrome.

Report any problems you encounter with Supermium or any suggestions ---> here

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...