Jump to content

My Browser Builds (Part 2)


Recommended Posts

that fixed it! i must have missed that, i'd been pretty busy for a few days and hadn't had time to work on this.

unfortunately, like all the other browsers i've tried on this machine, it works fine for 5-10 seconds, then it doesn't redraw the window without some kind of manual intervention, pages render fine youtube videos play sound, but the whole gui remains frozen unless you resize the window, use the menu bar, or switch to another window on top of it then switch back. though unlike newmoon or firefox, k-meleon does update the tab bar and other ui elements, where the others just keep them however they were when you open the browser.

Edited by flyod
Link to comment
Share on other sites


flyod said:
> just a while ago, i realized i can also force the window contents to update by moving
> another window in front of it, then clicking back to the palemoon window.
> also, if it would help narrow things down, chrome-based browsers has a very similar problem.

Glad KM runs again. And no idea, am no expert at all, but could it be the browser is moved by the system into background and some invisible task jumps into foreground? Perhaps some cleaner, indexer, or malware, system plugin, whatever. But just wild guessing. Or a driver prob as you wrote here:
https://msfn.org/board/topic/180462-my-browser-builds-part-2/?do=findComment&comment=1182803

Does it happen too if you disable javascript completely?
Or set the browser offline?
If you save a little static page to disk and open this one only?

If browser related, a couple more prefs which may or may not be involved, trying can't harm:

layers.low-precision-buffer
dom.ipc.plugins.asyncdrawing.enabled = false
other ..."ipc" prefs...
layout.interruptible-reflow.enabled (true or false?)
plugin.scan.plid.all = false
kmeleon.plugins.external.load = false
browser.sessionstore.max_tabs_undo = 0
javascript.options.jit or ".ion" prefs or "wasm" = false
..."prefetch" prefs (Create manually: "network.dns.disablePrefetchFromHTTPS")
network.predictor.enabled
profiler.enabled (telemetry collection)
..."workers"...
..."webcomponents"...

Link to comment
Share on other sites

i tried most of those, they didn't seem to change anything. at this point, im pretty sure the problem is driver or hardware related, i've noticed minor graphical problems in a few other programs. i've tried two versions of the amd drivers, as well as the onboard intel video with the default windows xp video driver, and also got the same result, so it might not be video. ii am using a complety unsuported chipset and processor, this entire computer was never meant to run windows xp 64-bit. i may try installing xp32 just to see if that makes any difference. i tried installing virtualbox, to have a windows xp vm on a windows xp host to see what would happen there, but virtualbox refuses to install, so maybe that means something too.  dxdiag tests show everything is fine on the machine, so its quite the mystery. if anyone has any ideas for other tests or benchmarks i could do, i'll give them a try.

Link to comment
Share on other sites

Recently - maybe in the last week or so - the Rotten Tomatoes search results have stopped rendering. Here's an example:

https://www.rottentomatoes.com/search?search=firefox#results_movies_tab

...where there should be a single result listed.

Under both FF52 original and basilisk52-g4.6.win32-git-20200620-34cf555-uxp-c05d07a68-xpmod, I can see the data is actually there [<script id="movies-json" ... "url":"https://rottentomatoes.com/m/firefox" ... </script>]  but it's not getting rendered as actual results.

Compare this to FF77 where we see #shadow-root elements appearing in the page's html. It is inside these #shaow-root elements that the results appear. Soo, does anyone know the story behind the webcompoants (aka shadow dom) stuff?

I notice that the latest UXP changes included these:
- Bug 1426494 - Share more code between nsIDocument and ShadowRoot (43725c726)
- Bug 1429656 - Implement ShadowRoot.activeElement (5e7917e2c)
- Bug 1430299 - Add DocumentOrShadowRoot interface (bbd59105d)

...which sounds tantalisingly as if it should support the shadow dom stuff.

Or am I missing something blindingly obvious?

Ben.

Link to comment
Share on other sites

WebComponents are WIP, might be why stuff breaks in UXP browsers.

Turning on dom.webcomponents.enabled in about:config doesn't seem to make a difference in appearance, though the output in the developer console is different.

Edited by UCyborg
Link to comment
Share on other sites

On 6/14/2020 at 11:15 PM, RainyShadow said:

Can anyone see the images at this page in NM27?

Here is a Greasemonkey script to "fix" the images on that page, on myanimelist, and many other sites that use "data-src" to hold the true image address:

// ==UserScript==
// @name       lazyload
// @description  LAZY Loading Images
// @match      http://*/*
// @match      https://*/*
// @grant       none
// @run-at          document-end
// ==/UserScript==

//
//  LAZY Loading Images 
//
//  Handles lazy loading of images in one or more targeted divs, 
//  or in the entire page. It also keeps track of scrolling and 
//  resizing events, and removes itself if the work is done. 
//
//  Licensed under the terms of the MIT license.
//
//  (c) 2010 Balázs Galambosi
//

(function(){

// glocal variables
var window    = this, 
    instances = {},
    winH;

// cross browser event handling
function addEvent( el, type, fn ) {
  if ( window.addEventListener ) {
    el.addEventListener( type, fn, false );
  } else if ( window.attachEvent ) {
    el.attachEvent( "on" + type, fn );
  } else {
    var old = el["on" + type];
    el["on" + type] = function() { old(); fn(); };
  }
}

// cross browser event handling
function removeEvent( el, type, fn ) {
  if ( window.removeEventListener ) {
    el.removeEventListener( type, fn, false );
  } else if ( window.attachEvent ) {
    el.detachEvent( "on" + type, fn );
  }
}

// cross browser window height
function getWindowHeight() {
  if ( window.innerHeight ) {
    winH = window.innerHeight;
  } else if ( document.documentElement.clientHeight ) {
    winH = document.documentElement.clientHeight;
  } else if ( document.body && document.body.clientHeight ) {
    winH = document.body.clientHeight;
  } else {        // fallback:
    winH = 10000; // just load all the images
  }
  return winH;
}

// getBoundingClientRect alternative
function findPos(obj) {
  var top  = 0;
  if (obj && obj.offsetParent) {
    do {
      top += obj.offsetTop || 0;
      top -= obj.scrollTop || 0;
    } while (obj = obj.offsetParent); // 
    return { "top" : top };
  }
}

// top position of an element
var getTopPos = (function() {
  var dummy = document.createElement("div");
  if ( dummy.getBoundingClientRect ) {
    return function( el ) { 
      return el.$$top || el.getBoundingClientRect().top;
    };
  } else {
    return function( el ) { 
      return el.$$top || findPos( el ).top;
    };
  }
})();

// sorts images by their vertical positions
function img_sort( a, b ) {
  return getTopPos( a ) - getTopPos( b );
}

// let's just provide some interface 
// for the outside world
var LazyImg = function( target, offset ) {

  var imgs,    // images array (ordered)
      last,    // last visible image (index)
      id,      // id of the target element
      self;    // this instance

  offset = offset || 200; // for prefetching

  if ( !target ) {
    target = document;
    id = "$document";
  } else if ( typeof target === "string" ) {
    id = target;
    target = document.getElementById( target );
  } else {
    id = target.id || "$undefined";
  }

  // return if this instance already exists
  if ( instances[id] ) {
    return instances[id];
  }

  // or make a new instance
  self = instances[id] = {

    // init & reset
    init: function() {
      imgs = null;
      last = 0;
      addEvent( window, "scroll", self.fetchImages );
      self.fetchImages();
      return this;
    },

    destroy: function() { 
      removeEvent( window, "scroll", self.fetchImages );
      delete instances[id];
    },

    // fetches images, starting at last (index)
    fetchImages: function() {

      var img, temp, len, i;

      // still trying to get the target
      target = target || document.getElementById( id );

      // if it's the first time
      // initialize images array
      if ( !imgs && target ) {

        temp = target.getElementsByTagName( "img" ); 

        if ( temp.length ) {
          imgs = [];
          len  = temp.length;
        } else return;

        // fill the array for sorting
        for ( i = 0; i < len; i++ ) {
          img = temp[i];
          if ( img.nodeType === 1 && img.getAttribute("data-src") ) {

              // store them and cache current
              // positions for faster sorting
              img.$$top = getTopPos( img );
              imgs.push( img );
//          } else {
//                 if ( img.nodeType === 1 && img.getAttribute("data-image") ) {

                     // store them and cache current
                     // positions for faster sorting
//                     img.$$top = getTopPos( img );
//                     imgs.push( img );
          }
        }
        imgs.sort( img_sort );
      }

      // loop through the images
      while ( imgs[last] ) {

        img = imgs[last];

        // delete cached position
        if ( img.$$top ) img.$$top = null;

        // check if the img is above the fold
        if ( getTopPos( img ) < winH + offset )  {

          // then change the src 
          img.src = img.getAttribute("data-src");
//          img.src = img.getAttribute("data-image");
          last++;
        }
        else return;
      }

      // we've fetched the last image -> finished
      if ( last && last === imgs.length )  {
        self.destroy();
      }
    }  
  };
  return self.init();
};

// initialize
getWindowHeight();
addEvent( window, "load",   LazyImg().fetchImages );
addEvent( window, "resize", getWindowHeight       ); 
LazyImg();

window.LazyImg = LazyImg;

}());

Shamelessly stolen from Balázs Galambosi, i just replaced "thumb" with "data-src" and added the header.

I tried to add an additional replace to account for the epicgames site, but failed miserably...

If some JS expert could modify this to work with multiple attributes instead of just "data-src", it would be great.

 

Link to comment
Share on other sites

RainyShadow said:
> Can anyone see the images at this page in NM27?
> Here is a Greasemonkey script to "fix" the images on that page, on myanimelist,
> and many other sites that use "data-src" to hold the true image address:
> I tried to add an additional replace to account for the epicgames site, but failed miserably...

Uh oh... I'm used to having such probs with my ancient system+browser, but now slightly shocked to hear that even NM27 can't handle all those images anymore! KMG76 (same engine) is my best hope for the future, sigh.
Was forced to help myself and created a little KM1.x macro-script years ago, for exactly the same purpose. Then over time, like you, noticed that data-src is not the only attribute, there are more. Actually have meanwhile collected 12.
And yet another catch for my older browser, but luckily not for your NM27 anymore, are multiple targets in one "srcset" etc.
It works now, mostly, though not perfect, and I prefer to run it only by command instead of automatically.
Have occasionally thought about posting this macro, it's really tiny and almost pure javascript, but am too used to be the only one with such pesky old-browser probs and a like for macros, so never bothered. And surely there are always much better scripts out there, from experts etc. Oh well, guess will post it anyway now, when ready. For other browsers the little script can easily be modified as bookmarklet.

Link to comment
Share on other sites

img = temp;

img.thumb = img.getAttribute("data-src") || img.getAttribute("data-image"); // add here

if ( img.nodeType === 1 && img.getAttribute("thumb") ) {

...

img.src = img.getAttribute("thumb");

 

Edited by jumper
Link to comment
Share on other sites

14 hours ago, Rod Steel said:

I found that firefox extension YouTube Classic by Mirza Brunjadze

https://addons.mozilla.org/en-US/firefox/addon/youtube-classic/

is working in roytam1's Basilisk. Old good YouTube without psychotic Polymer. Unfortunately, there is no XUL analogue known to me for New Moon.

Default settings just spoof the user agent, which you can replicate by setting general.useragent.override.youtube.com in about:config to: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

Link to comment
Share on other sites

@siria

it's not only that, but the modification broke what was working before

Of course, it would be best if whatever prevents the original scripts on those sites from doing their job was fixed in the browser...

Link to comment
Share on other sites

@RainyShadow
testpage works now: www.epicgames.com/store/en-US/free-games
For writing thumb older KM needs img.setAttribute('thumb', x) not just img.thumb

// img.thumb = img.getAttribute("data-src") || img.getAttribute("data-image"); // add here
var x= img.getAttribute("data-src") ||
img.getAttribute("data-image") ||
img.getAttribute('data-srcset') ||
img.getAttribute('lazyload-src') ||
img.getAttribute('data-original') ||
img.getAttribute('src-load') ||
img.getAttribute('srcabsolute') ||
img.getAttribute('data-img-src') ||
img.getAttribute('data-ezsrc') ||
img.getAttribute('data-lazzy') ||
img.getAttribute('data-zoom-src') ||
img.getAttribute('data-pagespeed-lazy-src') ||
img.getAttribute('nitro-lazy-srcset') ||
img.getAttribute('nitro-lazy-src') ;

if (x) img.setAttribute('thumb', x.split(' ')[0]);

-------
ATTENTION users of browsers OLDER as Firefox38 / PM27 / KM-Goanna76:
add this too:
img.getAttribute('srcset') ||
(modern browsers handle this one automatically by pure CSS, no JS needed)

Edited by siria
added 2 more attributes and srcset for OLD engines
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

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