Two ways of addressing browser incompatibility are using the Can I Use web site and doing feature testing.
The Can I use..." website is very helpful for seeing which browsesrs support which features. You can find that web site at http://caniuse.com) Knowing which browsers have implemented which features is extremely useful. I encourage you to take a look at the site, especially the HTML5 and JS API categories.
Here's the Can I use... ECMAScript 6 compatibility table: http://kangax.github.io/compat-table/es6/
Feature testing is the idea of using JS code to see if a particular feature is available in a browser. For example, a web site might use an HTML5 canvas to draw graphics on a page if it's available. The feature-testing code can attempt to create a canvas element and then set a flag based on the result. You can see some examples of feature testing code at http://kangax.github.io/cft/
Here's a link to an MDN (Mozilla Developer Network) article about feature testing: https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Feature_detection
If you wonder what people mean when they talk about browser sniffing (and you want a good laugh), read this: History of the browser user-agent string
Note that an HTML document can contain script tags that load JS from a different server than the server from which the HTML document was loaded. No matter what server the JS code is actually loaded from, for purposes of the same-origin policy the JS code is associated with the server from which the HTML document was loaded.
An origin (or server) is defined as the combination of the protocol (like http or https), the host name, and the port number.
You can read about the same-origin policy in this Wikipedia article: https://en.wikipedia.org/wiki/Same-origin_policy
Model View Controller (MVC) is a design pattern that is used in many different kinds of programs. The basic idea is to separate the model from the view so that they only communicate indirectly through a controller.
The model contains application-specific objects (or functions and data) and does not contain any information about how that information will be displayed to the user. For our purposes, that means that the model does not contain or generate any HTML, CSS, or images. You can think of the model as representing the rules of the game and the current state of a game being played. For example, the model for chess could include functions that determine what is a legal move, along with the positions of the pieces on the board. That model can be used with any chess set (view).
The view displays the model to the user. In our case, the view will generate HTML that the player sees in a browser window.
The controller acts as a go-between for the model and view.Some advantages of MVC are:
Here are some slides that I made about the MVC design pattern, along with a
video presentation of the slides:
slides (PDF) video video script
There are many different interpretations and variations of the MVC pattern, but for this class the most important concept is to separate the model from the rest of the application. That gives many of the advantages of MVC without getting into the complexity and details of some descriptions of MVC.
A related idea is the idea of progressive enhancement, which means that a web site is functional and useful even for a limited browser, such as the browser on a flip phone, but provides more features for browsers that can support them. You can read about progressive enhancement here: https://alistapart.com/article/understandingprogressiveenhancement
More importantly, there is a feature called web workers that provide a way to run scripts in the background. It's well supported by current browsers, as you can see on this page at caniuse.com: http://caniuse.com/#feat=webworkers. You can read about web workers here: http://www.html5rocks.com/en/tutorials/workers/basics/