Ну вообще код не ахти и работает в нормальных браузерах по случайному совпадению. Совершенно не гарантируется, что на window.onload картинка, созданная динамически, будет загружена.
Вот так надо бы:
window.onload = draw;
function draw() {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext('2d');
var hills = new Image();
hills.src = 'http://7-themes.com/data_images/out/73/7022406-forest-background.jpg';
canvas.setAttribute('width', window.innerWidth);
canvas.setAttribute('height', window.innerHeight);
hills.onload = function () { // теперь, когда картинка загрузилась, можно и нарисовать
ctx.drawImage(hills, 0, 0, canvas.width, canvas.height);
}
}