Can I create a public address for Bitcoin without the private address appearing on the screen? Is there JavaScript which will do this?

I would generate a 256 bit password using 99 dice throws, enter it into JavaScript on an offline computer (like using bitaddress.org) and get an address to send Bitcoin to, so that I can store them cold.

What I don’t want, as would be done in bitaddress.org, is for my private key to be shown on the screen in case there is screenshot malware on the computer. (N.B. I can defeat key-logging by scrambling the entry of the dice throws using a mouse).

When I wish to transfer the Bitcoin to, say, a Blockchain account, I can go to an offline computer, generate the private key from the password using bitaddress.org and then on another computer which is online carry out the transfer.

The procedure seems pretty safe to me.
If you're afraid of screen grabbing you should also be afraid of memory grabbing malware.

If however you make sure that such malware can never communicate anything to the outside world then you don't have to worry about either of those types of malware.

You can do that by booting from a write protected media (CD) and making sure there is no other writable media ( harddisk) connected. Also of course make sure the machine is offline (no network cable or WiFi etc).

After generating the private key write it down (error sensitive!) or print it (not on the big printer in the office, those often have harddisks in them). And after that turn off the computer to erase the memory.

Even in this setup you still don't want malware on the PC because it could influence the creation of the private key by making it predictable.