`speculationrules` markup not working for prerendering pages in Chrome - html

Following the instructions in the Chrome blog Prerender pages in Chrome for instant page navigations, I am trying to enable pre-rendering on a website. I have added this snippet just before </body>.
<script type="speculationrules">
{
"prerender": [
{
"source": "list",
"urls": ["/Test/1","/Test/2","/Test/3"]
}
]
}
</script>
However, on the latest version of Chrome 108, none of these valid URLs are prefetched or prerendered when opening the page. I can confirm this in the Network tab of Dev Tools, and by following links to the pages which take the usual load time.
In the console, HTMLScriptElement.supports('speculationrules') returns true.
Am I missing something?

I can confirm this in the Network tab of Dev Tools
As the new prerender happens in a separate process (effectively like a background tab) any network calls are not shown in the current page’s DevTools. The Chrome team are working on adding DevTools support.
So here’s a few things to check:
Chrome doesn’t prerender when it’s already using a lot of memory. Try restarting Chrome with just that tab to rule this out.
Make sure you have “Preload pages” ticked in Settings->Privacy & Security->Cookies and other site data
Chrome Canary has a handy experimental setting which shows the reason pre-renders fail worth checking that out. Hopefully that will make it to stable soon.
It’s worth confirming if this is a specific issue to your site, or a general prerendering issue. Checkout the demo linked from that article and let us know if that works
Switching tabs currently cancels any prerenders. So make sure you launch straight from your page.
URL param differences can prevent prerendering being activated as it’s effectively not the same page.
There have been a few bug fixes since 108, so it maybe you’re hitting one of those? Check Dev, Beta, or Canary versions.
There is a “holdback” group of people we randomly select to disable this feature so we can continue to monitor it as it is rolled out, and compare to those not using it. It could be you’re in this group. Unfortunately there’s no easy way to tell this (the Chrome team is working on adding this). Try guest mode to see if that works which is usually the best sign you’re in this group.
Might be able to advise more after you try above steps and let me know.

Related

Google Chrome developer tools works very slow

Sinсe Google Chrome was updated to 50.x version, it become impossible to work with DevTools. This issue reproduced mostly in "Network" tab. Every time when you click on "request" it takes about 30-40 sec. after that chrome can crash. Tried to delete all extensions, clear cache, and reinstall, but didn't help. Does anybody know how to fix this issue?
I'm running Chrome 50.0.2661.87 m
UPD: The problem may be occurs because of long headers. Try to close response and request headers.
I've been having similar issues for debugging in Chrome versions 50+ on Mac OS X 10.11.3. The only solution I've found so far is to keep the dev tools docked to the right and it seems to be as performant as before. Not the optimal solution, but it works in my case.
Finally, a solution has been found which helped me after such a long time and after so many failed attempts to fix it: Solution on Google Chrome Forums
Go to chrome://flags/#force-color-profile
Change it to sRGB
Since Google does not allow direct links to chrome:// you'll have to insert the colon by yourself, or enter the whole link manually into your toolbar.
My situation was similar, after struggling a while with extreme slow developer tools response I found out the problem was caused by a Chrome extension I had installed for knockoutJs.
So for people experiencing these issues, as part of the initial troubleshooting, try disabling chrome extensions.
I'm using the Version 61.0.3163.79 and I have the same issue that this post talks about.
With some searches I found out that the problem was in the user that I was using. What I tried was to enter int google chrome as guest and the devtools became faster again.
So what I did was:
Check out if debugging using the guest user is faster as it should be.
Logout from the account.
Clean all cache associated to google chrome.
Restart the PC (but i think closing the browser is enough)
Login again in your account.
I hope this could help other people with same problem.
[EDIT:]
I found out that after some time (weeks) the google chrome dev tools will get slower again. So I tried the following solution and it worked:
Open the dev tools
Go to the Sources tab.
Cleaned all watched variables, breakpoints, DOM breakpoint and Event Listeners breakpoint.
[SECOND EDIT:]
After some weeks, the issue came again. What I did was installing the google canary Version 64.0.3249.2 canary (64-bit) and my problems vanished.
For who's that doesn't know what is canary, please check this link.
Google is aware of the problem - https://bugs.chromium.org/p/chromium/issues/detail?id=624097
The problem seems to have vanished in v.53 - they are currently trying to figure out what fixed it. If possible, the fix will be merged back to v.52. But at least they are working on it.
In case others arrive here facing the same issue I had, try changing the Dev tools tab you're looking at to Elements.
I had the "Sources" tab open and Chrome was trying to load enormous assets for that tab, which created a multisecond delay between the console.log() events I created and the display of those logged messages.
Make devtools snappy again by deactivating all breakpoints:
Go to the Sources tab, show the debugger (may be hidden) and hit Deactivate breakpoints.
(Chrome v62.0 on Windows 10)
I've had the same time issue on 54.0.2840.99 m version of Google Chrome.
But switching to Chrome Canary worked !
Reduce size of resource being overridden
Only overriding files with less lines of code worked well for me. I landed here because I was overriding a file which had 35,000 + lines of Javascript.
Further, if your resource is a new one - i.e. it is not included in a script tag or link tag, you can override main html document and add the tag : <script src="/my-new-script.js"></script>. Add the file to your domain-root within the Overrides folder on Chrome:
overriding HTML
then overriding CUSTOM SCRIPT:
Good Luck...
I also face same issue.
I tried unchecked toggle screencast. Now it is working fine.
In my case, I had Local Overrides setup (https://developers.google.com/web/updates/2018/01/devtools#overrides) in Downloads folder which had a lot of files in it and that slowed down devtools.
Setting up overrides in its own seprate directory fixed the slowness.
I sped up Chrome again by doing the following:
Open DevTools -> select Elements tab ->
select nested Computed tab -> under Filter, make sure that Show all is unselected.
select nested Event Listeners tab -> make sure that Ancestors and Framework listeners are unselected.
For me, running Chrome Version 81.0.4044.138 (Official Build) (64-bit) on Ubuntu 18, the problem seems to be the mobile view. When I disable mobile view inspecting becomes really fast again. I think it is caused by touch emulation and other mobile stuff.
To have something similar to a mobile view I move the DevTools dock to the side and resize it until I get the width I need. It is not perfect, but it is useful most of the time.
Besides Chrome, Firefox is much faster when inspecting sites overall, though I didn't use FF because I'm used to specific things on Chrome. Moreover, most of the sites I work with do not trigger these issues on Chrome, in fact, it happens with only one site.
PD: the site that triggers the issue on Chrome Dev Tools has lots of CSS variables. Not sure if that is related.
UPDATE 1 WEEK ago
I was able to use Chrome without issues even in the mobile view by disabling the option "Show media queries"
Go to the network tool and change it without any restrictions. Sometimes this happens if you change mobile settings. Google chrome changes this setting to test mobile device on low internet connection and leaves it that way.

Why is my Chrome Extension grayed out?

Problem
A chrome extension I wrote is grayed out, and I can't figure out why.
Context
I wrote and submitted a Chrome Extension called Pull Favors to the Chrome webstore.
It uses the CSS order property to sort and group GitHub Pull-Requests in a logical way.
The other day I noticed that several of my extensions were grayed out, and 'blocked'--meaning they no longer work. One of these was Pull Favors.
According to this support article:
If you see a message saying "Extensions Disabled," it's because Chrome has turned off one or more of your extensions to keep your data safe while you're browsing the Internet. The extensions that Chrome turned off either didn't come from the Chrome Web Store or were installed without your permission."
My extension is published in the Chrome webstore and was certainly installed with my permission.
I've tried uninstalling and reinstalling to no avail.
I suspect there's something wrong with my extension (since a few other extensions seem to still work), but I can't figure out what it is or find anything about it on the internet.
What's going on?
Research
Chrome seems to have implemented a new policy in November 2013, which has caused some uproar in the community, which prevents Windows users from installing extensions from outside the web store.
I'm not sure why this is affecting me, as I'm an OS X user and, as I said, my extension is distributed through the webstore.
Add browser_action.default_icon in your manifest.json file
{
...
"browser_action": {
"default_icon": "icons/icon-32.png"
},
...
}
Before
After
In one of the last couple updates, they did something weird with the extensions that now makes all enabled extensions show up in either the toolbar or in the menu. In your case, the extension icon is grayed out because you don't even use a browser action or a page action, so it is just showing the icon. So it isn't disabled, just doesn't have an active state so is grayed out.
A quick search doesn't seem to turn up a blog post about it, but if you right click on the icon you can hide it in the menu.

Context menu is disabled on localhost on Chrome

This is the weirdest bug.
For some reason, the ctrl-click context menu has stopped appearing only on Chrome - localhost. I can view localhost in Safari and get a context menu and I can even view the exact same site I am developing on it's url in Chrome and get a context menu. Any other site I view in Chrome will also generate a context menu.
The context menu stopped appearing recently, it had been working fine up until this point.
I haven't been able to find any information on why this is happening.
I found this help in chrome
I hope it helps you
Re-enable the possibility to use the context menu on sites that overrides it.
This extension re-enables the context menu.
Indeed, many sites prohibit the right-click on images, pretending to protect their content. I think it is illegitimate.
(This extension is AD supported. If you don't wish to support me you may disable it in the settings.)
Unfortunately, Google Chrome does not have advanced options for what javascript is allowed to do (on the contrary of Konqueror, Opera or firefox). If you think it should, please star (don't add a "me too" comment)
In the meantime, this extension provides a workaround, by resetting the oncontextmenu to its default behaviour on many elements of the page. Oh, as a bonus, it works for Flickr and Youtube html5 videos too!
If a site is not supported, please report it in the bug tracker, not in the comments.
If a site is broken by the extension, please report it in the bug tracker, not in the comments.
However, a nice comment is always welcome :-)
I think chrome introduced this in 57 or 58 .. A perhaps simpler workaround is to add an entry to your system's hosts file and access your server using that.
i.e.:
127.0.0.1 server.local
then, instead of http://localhost/ , use http://server.local/ (and/or https, and/or port number, etc. as the case may be)
Bam! Chrome gives you your context menu back!

Webpage displayed in Incognito, not in regular Chrome

So i have been running into this problem with a lot of Wordpress sites lately, usually occurring when i am logged in as Admin, so i couldn't post here because no one would be able to view the problem. However, i just found a site that it happens on that doesn't require admin creds.
http://www.otisports.com/
When i visit this site in Chrome (Version 34.0.1847.137 m), it just displays a blank page. No errors, just the (what now seems standard) event.returnValue is deprecated. Please use the standard event.preventDefault() instead. warning. I have seen that warning signify problems on the site, but they are usually minor, not to the extent that the above URL displays. However, if i open an Incognito window and visit the site everything works perfectly and there is no warning. Does the Incognito window deal with webpages in a way that is so entirely different that it would cause something like this to happen?
I have been racking my brain trying to figure this out. Can anyone reproduce this? is it a bug in chrome?
EDIT: I just tried to open a bounty on this question and the EXACT same thing happened. In Regular Chrome, nothing happened when i clicked the start a bounty link and i saw various errors Undefined is not a function however in incognito everything worked perfectly. what gives?!
EDIT: Yes, i have cleared the cache, history, cookies, everything, and i still get the same errors. I cant even post a comment on this question because of errors...
I came across the same issue when trying to open evernote.com. It loaded successfully while using incognito mode in chrome. Let me share how I fixed this even though the original post is way too old. But maybe someone can find it useful.
I'm using chrome (Version 73.0.3683.103 (Official Build) (64-bit)) running on Linux Ubuntu 18.04.2 LTS.
I tried disabling all extensions and clearing browser data/cache but nothing worked. PS: Disabling adblock previously worked for me. Yes, I stumbled over the same issue before and whitelisting evernote in adblock solved the issue. But it didn't now.
The following is what worked for me:
Open developers tools (CTRL + SHIFT + J).
Navigate to Applications tab.
Choose Clear storage from the side menu
Hit Clear site data button.
After reading the comments I dug into chrome and saw there was a bunch of extensions still sitting around that were definitely malware and I thought I had previously deleted. Instead of picking through them one-by-one, I just deleted everything, re-installed Chrome, and now everything works great!
I had the same issue. My application was working in Incognito mode and in Firefox but not in Regular Chrome. I even disabled all the extensions but no luck. I eventually cleared the Cached images and files because on developer console I found out that the regular chrome was still picking up the old file due to caching. So as soon as I cleared it, my app showed up like a rocket :)
Try removing any non required extension .
Specifically AdBlock
I resolved the problem post that.
Since on Incognito , extensions are disabled, hence page run as expected.
I resolved this unforeseen issue using following steps.
CTRL + SHIFT + DEL > Clear Browsing Data.
Cookies and other site data
Cached images and files
This is for Chrome Browser.
Open Console (Ctl+Shift+I) first.
Then under the application tab, you will find some options on the left, find out the application there, you will find it at the top.
There you will find Service Workers.
Under Service Workers, there will be three checkboxes. Select Update on reload checkbox and reload again.
I had the same issue after installing React-Sight Extention.
The Page hanged but not in the incognito mode.
Try deleting any recently added or junk extension.
Delete your cache.
That worked for me
I had a similar issue in chrome, in my case the problem was that I could log in to my university library's website only in incognito mode. After some digging, I figured out that Google Translate extension was set to automatically translate any page. When I turned that off and instead selected never translate that specific page, it started working in the usual mode as well.
This is rather an old issue but still happens. None of the solutions recommended here and there did not solve the issue in my case.
I somehow noticed this is related with a -some kind of- corruption on the user profile.
This is how I solved it:
Close all Chrome browsers.
Open a Google page on Chrome.
Sign-out from Google (rigt click your profile picture on a Google page, not on the Chrome itself), and sign-in.
If this doesn't work:
Close all Chrome browsers.
Right click Chrome icon and select Google Chrome.
Delete your Google profile on the "select your profile" page.
Close Chrome.
Open Chrome, sign-in.
uBlock Origin was the culprit in my case. Once I allowed the site in uBlock Origin, pages loaded correctly in normal Chrome.

How can I force a hard reload in Chrome for Android

In Chrome for desktop I have options in the dev tools to disable cache completely when dev tools are opened and I have the options to manually do a hard reload when long clicking on the reload button (with dev tools open).
Is there any such technique for Chrome for Android? I didn't find any setting.
What can I do when I want to force the browser to download some javascript or css file instead of using a cached one when developing?
I'm using window.location.reload(true) according to MDN (and this similar question) it forces page to reload from server.
You can execute this code in the browser by typing javascript:location.reload(true) in the address bar.
Viewing the page in incognito mode will disable the cache. It was the only way I could force a refresh on a stylesheet without manually clearing the cache through the settings.
Also an option:
Menu
Settings
Privacy
Clear Browsing Data
Check "Cache" and press "CLEAR"
and then reload the page.
You can use the Request Desktop Site option from the app menu (to the right of the address bar) which will force the page to reload.
Simply tap it, wait for the refresh, then deselect it.
Mentioning this because you mentioned "when developing".
You can control the mobile device via your Chrome Desktop Browser.
Visit chrome://inspect/#devices on your desktop. And Inspect the device that's connected to your desktop. Agree when asked for permission.
You should now see a full fledged Devtool window for the current page on mobile device.
Now, Use the hard reload shortcut (Cmd+Shift+R) on desktop to do hard reload on mobile device!
How to reset all data for a given URL / Website on Chrome Mobile for android:
1 - Open the Chrome menu, and tap on the "i (info)" icon
2 - tap "Site settings"
3 - Tap the trashcan icon
That's it, even the most deeply ensconsed service worker for that URL will now die.
Don't forget to make sure that the "Reduce data usage" setting is turned OFF, as it seems to download cached data (from Google servers?) even though your local cache is flushed.
I know this is an old question, but I found that the accepted answer didn't work for me.
An alternate solution would be to append the url with a new url parameter
such as website.com?a=1, website.com?a=2, etc.
If you have parameters already, of course, you would use an ampersand
i.e. website.com?q=test&a=1
As of 2018, from google help center (tested on Chrome 63) :
tap on the three dots menu ;
choose History > Clear browsing data ;
if needed, choose the time period (above the checklist) ;
uncheck all items but Cached images and files ;
proceed with Clear data and confirm.
As mentioned in another answer, incognito tabs are also of great use for development.
I found a solution that works, but it's ugly.
Connect the Android device to your PC with a USB cable and open Chrome on your desktop.
Right-click anywhere on a page and select "Inspect".
Click the three-dot menu and select "Remote devices" under the "More tools" menu:
In the panel that opens, select your device and then the "Inspect" button next to the name of the tab on your phone that needs to be refreshed:
In the window that opens, click the "Network" tab and check the "Disable cache" checkbox:
Reload the page on your phone or using the reload button in the DevTools window.
Note: if your phone doesn't appear in the device list:
make sure the USB connection is using File Transfer mode and isn't simply charging
try restarting ADB or run adb devices to see if the device is being detected
The only reliable way I've found that doesn't require plugging the phone in to a PC is as follows:
1. Force stop the Chrome app.
This must be done first, and you cannot re-open Chrome until you finish these steps. There are several ways to force stop. Most home launchers will let you get to "App info" by holding down your finger on the chrome icon and selecting an "i" icon. Alternately, you may be able to go to Android settings and simply search for "Chrome".
Once in "App info", select "Force stop" as shown below:
2. Clear Chrome's cache
Select "Storage" from the same screen:
Finally, select "Clear cache".
When you return to the Chrome app, the page should reload itself and serve a non-cached version.
Additionally, I found a site that makes it easy to test if you've cleared your cache: https://refreshyourcache.com/en/cache-test/
I am in no way affiliated with it. Note that the method to clear the cache mentioned on that site is in fact outdated and no longer valid.
Keyboard shortcuts such as Ctrl+Shift+R work on Android too, you just need a keyboard capable of sending these keys. I used Hacker's Keyboard
to send Ctrl+Shift+R, which did a hard reload on my phone.
Recent versions of Chrome cache very aggressively. Even cache-busting techniques such as "http://url?updated=datecode" stopped working. You must clear the cache or launch an incognito window every time (and make sure data-saver is off).
Remote Debugging allows you to use the desktop dev-tools:
https://developers.google.com/chrome-developer-tools/docs/remote-debugging
If its just the matter of included files, just add version after the path (?v=12345678)
<link rel="stylesheet" type="text/css" href="style.css?v=12345678" />
Whoever loads the page again will see changes.
Most of the answers were not working for me.
Here is a super simple working on my Galaxy S8 in august 2020:
Add "view-source:" just before your http:.... address, navigate trough there to the changed file if different than the html or index.
You will see the unchanged file. Refresh.
Done.
EDIT: This method has been deprecated in Google Chrome and will no longer work.
ORIGINAL ANSWER:
I was able to clear the cache (including subsequent xhr) using chrome://net-internals
Then click the little arrow in the top right
Select "clear cache" from that menu.
Here is another simple solution that may work when others fail:
Today, a fairly simple developer-side solution worked for me when the caching problem was a cached CSS file. In short: Create a temporary html file copy and browse to it to update the CSS cache.
This trick can refresh the CSS file, at least in Android's blue-globe-iconed default browser (but quite likely its twin, the official Chrome browser, too, and whatever other browsers we encounter on "smart"phones with their trend of aggressive caching).
Details:
At first I tried some of the fairly simple solutions shared here, but without success (for example clearing the recent history of the specific site, but not months and months of it). My latest CSS would however not be applied apon refresh. And that even though I had already employed the version-number-trick in the CSS file-call in the head section of the html which had helped me avoid these pesky aggressive cachings in the past. (example: link rel="stylesheet" href="style.css?v=001" where you upgrade this pseudo-version number every time you make a change to a CSS file, e.g. 001, 002, 003, 004... (should be done in every html file of the site))
This time (August 2019) the CSS file version number update no longer sufficed, nor did some of the simpler measures mentioned here work for me, or I couldn't even find access to some of them (on a borrowed android phone).
In the end I tried something relatively simple that finally solved the problem:
I made a copy of the site's index.html file giving it a different name (indexcopy.html), uploaded it, browsed to it on the Android device, then browsed back to the original page, refreshed it (with the refresh button left of the address bar), and voilà: This time the refresh of index.html finally worked.
Explanation: The latest CSS file version was now finally applied on Android when refreshing the html page in question because the cached copy of the CSS file had now been updated when the CSS file was called from a differently named temporary html page that did not exist anywhere in the browser history and that I could delete again afterwards. The aggressive caching apparently ignored the CSS URL and went instead by the HTML URL, even though it was the CSS file that needed to be updated in the cache.
Adding a parameter to url fool browser to load a new page. I wrote a fuction for that purpose:
function forceReload(){
function setUrlParams(url, key, value) {
url = url.split('?');
usp = new URLSearchParams(url[1]);
usp.set(key, value);
url[1] = usp.toString();
return url.join('?');
}
window.location.href =setUrlParams(window.location.href,'_t',Date.now());
}
And you just need to call it:
forceReload();
I've struggled with this for a CSS file that wouldn't refresh. But you can type the name of the CSS file itself into the address bar and refresh that. After that it's fine. Chrome on Android 8. Obviously that would be tiresome if you had more than a couple of files involved.
If that's an option, you can visit the (i.e. JavaScript) resource directly, reload a bunch of times, and that also triggers a hard reload for that resource. Then you can reload the actual page again.
Launch the Chrome Android app
Tap on the menu for more options.
Select Settings from the list of options.
Scroll down and tap on the Site Settings tab.
Within the Site Settings open the Data Stored tab.
Tap on the Site URL that you want to delete storage.
Hit on the Clear & reset command button.
refresh the website page.
there are few methods to force reload chrome on mobile device:
clear history (look above)
use remote debugging (look above)
request desktop site
disable "Lite mode"
open URL for .JS or .CSS then do normal reload.
In chrome,simply tick "Desktop site" and then remove tick!!