Polymer is not defined, Reference error in Firefox - polymer

What is missing in this simple code, that fails in Firefox while works fine in Chrome?
<!DOCTYPE html>
<html>
<head>
<base href="//polygit.org/components/">
<script src="webcomponentsjs/webcomponents.js"></script>
<link rel="import" href="paper-material/paper-material.html">
<dom-module id="ui-firefox">
<template>
<paper-material>Can you see me in Firefox?</paper-material>
</template>
<script>
Polymer({
is: "ui-firefox",
ready: function(){ console.log("Am I ready?"); }
});
</script>
</dom-module>
</head>
<body>
<ui-firefox> </ui-firefox>
</body>
</html>
A fiddle sample here https://jsfiddle.net/s4oh43za/
I have read a few posts, but I couldn't find the solution for this simple case
Thanks in advance, Fausto

My guess is Firefox loads HTML imports in a different way.
The Polymer docs recommend wrapping your dom-module script in HTMLImports.whenReady(function() {...}) when it's defined in index.html. This modified version of your jsfiddle works in both Firefox and Chrome after following that recommendation.

Related

Can not make Polymer ready when number of imports and file size are large

I can run all the following simplified code in jsbin without any error. The size of the real code is large - it contains many imports, and properties and functions within Polymer().
The real version of the following simplified version of index.html has been working fine with both Iceweasel and Chromium in localhost:
(version 1)
<!DOCTYPE html>
<html>
<head>
<script src="http://polygit.org/components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="http://polygit.org/components/polymer/polymer.html">
<link rel="import" href="http://polygit.org/components/paper-input/paper-input.html">
</head>
<body>
<dom-module id="my-element">
<template>
<paper-input></paper-input>
</template>
</dom-module>
<script>
HTMLImports.whenReady(function(){
Polymer({
is: 'my-element'
});
});
</script>
<my-element></my-element>
</body>
</html>
However, when the real version of above index.html is served from remote host, the function passed to HTMLImports.whenReady never gets called. Besides, Iceweal complains ReferenceError: Polymer is not defined.
Then I borrow this technique to have this version (version 2):
<!DOCTYPE html>
<html>
<head>
<script src="http://polygit.org/components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="http://polygit.org/components/polymer/polymer.html">
<link rel="import" href="http://polygit.org/components/paper-input/paper-input.html">
</head>
<body>
<dom-module id="my-element">
<template>
<paper-input></paper-input>
</template>
</dom-module>
<script>
var init=function(){
Polymer({
is: 'my-element'
});
};
if(HTMLImports.ready)
init();
else{
console.log("called"); //Always comes here!
HTMLImports.whenReady(init);
}
</script>
<my-element></my-element>
</body>
</html>
comment for above version: The real large version always runs to HTMLImports.whenReady(init); but function init() never gets called.
I also tried this technique and make the simplified code look like this (version 3):
<!DOCTYPE html>
<html>
<head>
<script src="http://polygit.org/components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="http://polygit.org/components/polymer/polymer.html">
<link rel="import" href="http://polygit.org/components/paper-input/paper-input.html">
</head>
<body>
<dom-module id="my-element">
<template>
<paper-input></paper-input>
</template>
</dom-module>
<script>
document.addEventListener('WebComponentsReady',function(){
console.log("called"); //Never gets called!
Polymer({
is: 'my-element'
});
});
</script>
<my-element></my-element>
</body>
</html>
console.log() in the above version is never executed.
How do I change the code so that it guarantees every element will be properly loaded even in cases where the file size is big and network and server are slow?
Thank you in advance!
(edit 1)
My browsers respond today differently than last night:
version 1: Both Iceweasel (i.e. Firefox?) and Chromium (i.e. Chrome?) remain silent and yield a blank page without any error or warning in developer's console.
version 2, version 3, and #akc42's version: Chromium displays the expected correct page. Iceweasel complains ReferenceError: Polymer is not defined.
(edit 2)
My test results are different from those 20 minutes ago as follows:
version 2: Chromium gives blank page. Iceweasel complains ReferenceError: Polymer is not defined.
version 3: Chromium complains Uncaught ReferenceError: Polymer is not defined. Iceweasel complains `ReferenceError: Polymer is not defined'.
I am reading the note here. I will split index.html into two and see if it make any different results.
(edit 3)
I am sad to report that splitting index.html into two files does not make any difference - both Chromium and Iceweasel quietly give blank page.
(version 4):
index.html:
<!DOCTYPE html>
<html>
<head>
<link rel="import" href="my-element.html">
</head>
<body>
<my-element></my-element>
</body>
</html>
my-element.html (version 4a):
<script src="http://polygit.org/components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="http://polygit.org/components/polymer/polymer.html">
<link rel="import" href="http://polygit.org/components/paper-input/paper-input.html">
<dom-module id="my-element">
<template>
<paper-input></paper-input>
</template>
</dom-module>
<script>
HTMLImports.whenReady(function(){
console.log("called"); //Never gets called!
Polymer({
is: 'my-element'
});
});
</script>
my-element.html (version 4b):
<script src="http://polygit.org/components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="http://polygit.org/components/polymer/polymer.html">
<link rel="import" href="http://polygit.org/components/paper-input/paper-input.html">
<dom-module id="my-element">
<template>
<paper-input></paper-input>
</template>
</dom-module>
<script>
Polymer({
is: 'my-element'
});
</script>
Many thanks to the helps from #ScottMiles and #akc42 !
My troubles turns out to come from ClouldFlare's cloud services. Their cache system heavily rewrites nearly all of my import files.
After I bypass CloudFlare's cloud, Chromium is happy with versions 1 and 4; Iceweasel complains `ReferenceError: Polymer is not defined' but displays the correct page with version 4.
Nevertheless, I much like their services. So, I will see if I can acquire their helps. (Currently I am using their free services)
Meanwhile, I will try vulcanize to see if the compressed single file is immune to ClouldFlare's cache system.
If anyone is generous to share your successful experience with ClouldFlare and Polymer, I will be much grateful, too.
(edit)
After I bypass CloudFlare's cloud, both Chromium and Iceweasel works flawlessly with all above 4 versions.
(edit 2)
I am pleased to quote ClouldFlare's swift reply to my request for help as follows:
This is strange- can you reenable CloudFlare on your trial subdomain and try a few things to see if we can narrow this down:
- Go to the 'Speed' page on the dashboard.
- Disable Rocket Loader by setting it to off
- If this doesn't correct the issue, try toggling the Minify options off at the top of the Speed page.
Rocket loader is a beta feature and so can sometimes cause issues- it is difficult to ensure 100% compatibility with all javascript on the web.
After I disabled Rocket Loader as ClouldFlare's expert told me, all the issues I encountered are gone! I am happy to mark this question as answered.
You don't need to wait for anything to call Polymer({is:'my-element'}); What you do do is have an ready function is the object you call Polymer with to tell you when its ready to go.
<!DOCTYPE html>
<html>
<head>
<script src="http://polygit.org/components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="http://polygit.org/components/polymer/polymer.html">
<link rel="import" href="http://polygit.org/components/paper-input/paper-input.html">
</head>
<body>
<dom-module id="my-element">
<template>
<paper-input></paper-input>
</template>
</dom-module>
<script>
Polymer({
is: 'my-element',
ready: function() {
console.log('element ready')
}
});
</script>
<my-element></my-element>
</body>
</html>
Normally you would declare the my-element object in another file that you would import.
Also, if you want to use any databinding at the index.html level you can use the element, which you then can listen for all elements in it complete, so
<body>
<template is="dom-bind" id="app">
<my-element></my-element>
</template>
<script>
var app = document.getElementById('app');
app.addEventListener('dom-change', function() {
//perform app initialisation here
});
</script>
</body>

Polymer website don't load an element

Hello
I'm starting with Polymer 1.0 and I'm trying to create my first element and load into an html page. I'm using Chrome Dev Editor, the project was created correctly because I could load all the example. After that I eliminate all the example code and create a:
Folder "elements" into the project
"hello-world.html" with the following code:
<link rel="import" href="../bower_components/polymer/polymer.html">
<polymer-element name="hello-world" noscript>
<template>
<h1>Hello World</h1>
</template>
Updated the code in the "index.html" file
<!doctype html>
<html>
<head>
<title>PolyExample</title>
<script src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="elements/hello-world.html">
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1>Test Polymer</h1>
<hello-world></hello-world>
</body>
</html>
I will appreciate any help about this
Thanks in advance
Your code has a serious problem in the way you create your element,
You use a dom-module element to create a new element and you need to write some JS to initialize the element. Below is an example
<link rel="import"
href="bower_components/polymer/polymer.html">
<dom-module id="hello-world">
<template>
<h1>Hello World</h1>
</template>
<script>
Polymer({
is: "hello-world"
});
</script>
</dom-module>
The script tag with that code is essential for your element to work.
This is probably as simple as it gets.
To read more on that follow the link:
https://www.polymer-project.org/1.0/docs/start/quick-tour.html

Polymer simple element is not rendering

I'm trying to render a simple Polymer-element. I have followed the docs and it is not rendered. The weird thing is that a more complex polymer tags do work (such as <dom-module id=""> ), but no luck with <polymer-element>.
index.html
<!DOCTYPE html>
<html>
<head>
<script src="bower_components/webcomponentsjs/webcomponents.min.js"></script>
<link rel="import" href="elements/daniel-element.html">
<title>Polymer Learning</title>
</head>
<body>
<daniel-element></daniel-element>
</body>
</html>
daniel-element.html
<link rel="import" href="../bower_components/polymer/polymer.html">
<polymer-element name="fav-color">
<template>
This is <b>{{owner}}</b>'s fav-color element.
{{owner}} likes the color
<span style="color: {{color}}">{{color}}</span>.
</template>
<script>
Polymer({
owner: "Daniel",
color: "red"
});
</script>
</polymer-element>
When I run:
python -m SimpleHTTPServer
OR
polyserve
The browser does not render the element.
I have looked on this subject and did not found a solution.. thanks before.
The <polymer-element> tag was used in older versions of Polymer. With 1.0 you need to use <dom-module id=""> which does work as you have noticed. Have a look at the migration guide to find out more on specifying local DOM in 1.0.

Blank page with Polymer

I am following this YouTube video and I have seen every previous video in the tutorial series.
This is my code:
<!DOCTYPE html>
<html>
<head>
<script src="bower_components/webcomponentsjs/webcomponents.js"></script>
<link rel="import" href="elements/hello-world.html">
</head>
<body>
<hello-world></hello-world>
</body>
</html>
And the second page:
<link rel="import" href="../bower_components/polymer/polymer.html">
<polymer-element name='hello-world' noscript>
<template>
<h1>Hello World</h1>
</template>
</polymer-element>
But my page is still blank, what am I doing wrong?
I use Wamp.
It's always happen to me if i'm not correctly import an element or library. So make sure all path locations are correct.
Make sure you use 0.5 version because in 0.8 custom element declaration is using <dom-module id="element-name"></dom-module>
First check your polymer version. it is found on bower.json under dependencies
check "polymer": "Polymer/polymer#^1.7.0" as you can see mine is 1.7.0. if you are using polymer 1.0 and above. the custom element declaration has been changed.
Here is a detailed note on what you have to do.
Change <script src="bower_components/webcomponentsjs/webcomponents.js"></script> to <script src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
Custom element declaration has also been changed from
<polymer-element name="hello-world">
<template>
<div>Hello World</div>
</template>
<script>
Polymer();
</script>
</polymer-element>
to
<dom-module id="hello-world">
<template>
<div>Hello World</div>
</template>
<script>
Polymer({
is: "hello-world"
});
</script>
</dom-module>
Check The Migration Guide Page https://www.polymer-project.org/1.0/docs/migration

Caja / Apps Scripts jQuery $(document).ready not firing

I have a project in Apps Scripts where the code in my $(document).ready never gets executed. I also tried with this basic code at http://caja.appspot.com/, which also doesn't work.
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$( document ).ready(function() {
$("span").text("Working");
});
</script>
</head>
<body>
<span>Not Working</span>
</body>
</html>​
The "Not Working" text shows up. Also tried with jQuery versions 2.x.x
Any ideas?
Thanks
This works if you use a slightly older jQuery version.
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("span").text("Working");
});
</script>
</head>
<body>
<span>Not Working</span>
</body>
</html>
I'm not sure why, since the documentation says Caja works with all recent jQuery versions: https://developers.google.com/apps-script/guides/html/restrictions#jquery_and_jquery_ui