Cannot read property 'implementation' of undefined #436

Closed
SunboX opened this Issue Apr 11, 2012 · 51 comments

Projects

None yet
@SunboX
SunboX commented Apr 11, 2012
/shared/users/xxx/node_modules/jsdom/lib/jsdom.js:171
    features   = JSON.parse(JSON.stringify(window.document.implementation._fea

                        ^
TypeError: Cannot read property 'implementation' of undefined
    at /shared/users/xxx/node_modules/jsdom/lib/jsdom.js:171:59
    at Request._callback (/shared/users/xxx/node_modules/jsdom/lib/jsdom.js:275:9)
    at Request.callback (/shared/users/xxx/node_modules/request/main.js:119:22)
    at Request.<anonymous> (native)
    at Request.emit (events.js:70:17)
    at Request. (/shared/users/xxx/node_modules/request/main.js:521:16)
    at Request.emit (events.js:67:17)
    at IncomingMessage. (/shared/users/xxx/node_modules/request/main.js:483:14)
    at IncomingMessage.emit (events.js:88:20)
    at HTTPParser.onMessageComplete (http.js:137:23)
@AvnerCohen

Seeing same problem as I run the main sample:

features   = JSON.parse(JSON.stringify(window.document.implementation._fea
                                                      ^

TypeError: Cannot read property 'implementation' of undefined
at C:\Program Files\nodejs\node_modules\jsdom\lib\jsdom.js:171:59
at Request._callback (C:\Program Files\nodejs\node_modules\jsdom\lib\jsdom.js:275:9)
at Request.callback (C:\Program Files\nodejs\node_modules\request\main.js:119:22)
at Request. (C:\Program Files\nodejs\node_modules\request\main.js:525:16)
at Request.emit (events.js:67:17)
at IncomingMessage. (C:\Program Files\nodejs\node_modules\request\main.js:4
84:14)
at IncomingMessage.emit (events.js:88:20)
at HTTPParser.onMessageComplete (http.js:137:23)
at Socket.ondata (http.js:1150:24)
at TCP.onread (net.js:354:27)

@AvnerCohen

Reported also at: http://stackoverflow.com/questions/10143288/node-js-jsdom-error
I've download the project and tried to execute the tests, they seem to fail as well.
Looking at the latest code changes in the project I can't seem to figure out when this has happened.
This happens with both node 0.6.11 and 0.6.15.

@ejohann
ejohann commented Apr 17, 2012

I am experiencing the same problem on mac osx

@tmpvar
Owner
tmpvar commented Apr 17, 2012

weird, I can't seem to dupe with the code from SO.

@SunboX
SunboX commented Apr 17, 2012

I´ve gotten this failure on cloud9ide.com ´s online test. Don´t know the node version running there

@philip-peterson

I too am running into this issue, on node v0.6.15.

@tmpvar
Owner
tmpvar commented Apr 18, 2012

what version of jsdom are you guys running?

@AvnerCohen

Mine is showing latest - 0.2.14.

@philip-peterson

Same, 0.2.14, installed via npm. Here's a test script which yields the error: https://github.com/philip-peterson/propellant/blob/c5bac2cc21fe3c38090d001bba09c78037378fe7/test.js

@slurdge
slurdge commented Apr 19, 2012

Same bug, both with node 0.6.15, 0.7.8 and jsdom 0.2.14.
Edit: on win7 64bits, also can trigger it with the script of philip-peterson

@brianmcd
Collaborator

It looks like this has something to do with the Contextify workaround. I can reproduce this without Contextify, but not with it. Contextify should build on Windows now, so try installing that.

@Warpten
Warpten commented Apr 20, 2012

Having the same with this test case:

var fs             = require('fs'),
    jsdom          = require('jsdom'),
    xpath          = require('./node_modules/jsdom/lib/jsdom/level3/xpath.js'),
    XPathResult    = xpath.XPathResult,
    XPathEvaluator = new xpath.XPathEvaluator();


for (var x = 1; x <= 4; x++) {    
    jsdom.env({
        html : 'http://sapphiretrans.free.fr/Pokedex/?act=' + x + '&page=0&mode=Crystal',
        done: function (err, window) {
            if (err) {
                console.log('Error caught at', err);
            } else {
                var context  = window.document,
                    xpathStr = '/html/body/div[1]/div[2]/table[1]/tr/td[2]/table/tr[2]/td',
                    result   = XPathEvaluator.evaluate(xpathStr, context, context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE);

                console.log('Results count: ', result.snapshotLength);
                console.log('Result textContent', result.snapshotItem(0).textContent);
            }
        },
        features: {
            FetchExternalResources   : [],
            ProcessExternalResources : false,
            MutationEvents           : false,
            QuerySelector            : false
        },
    });
}

It should be noted that i do NOT have Contextify on this computer, since I'm not gonna install Python for this sole app.

@trevoro
trevoro commented Apr 20, 2012

After digging around the issue is in fact related to Contextify.
If Contextify is missing / cannot be installed then this error pops up.

contextify is having a problem because it tries to build bindings using the 'node-bindings' tool, which then uses 'node-gyp' which doesn't support Python 2.4, it seems.

What version of Python do you all have installed?

@philip-peterson

I've got "Python 2.7.2+"

@AvnerCohen

2.7.2, Windows distribution.

@Warpten
Warpten commented Apr 21, 2012

Just installed Python 2.3.5. Its currently compiling Contextify, ill keep you in touch and edit when the process either fails or successes.

@Warpten
Warpten commented Apr 21, 2012

Console output:


C:\Program Files\nodejs>npm install jsdom
npm http GET https://registry.npmjs.org/jsdom
npm http 304 https://registry.npmjs.org/jsdom
npm http GET https://registry.npmjs.org/cssom
npm http GET https://registry.npmjs.org/contextify
npm http GET https://registry.npmjs.org/request
npm http 304 https://registry.npmjs.org/cssom
npm http 304 https://registry.npmjs.org/request
npm http 304 https://registry.npmjs.org/contextify
npm http GET https://registry.npmjs.org/bindings
npm http 304 https://registry.npmjs.org/bindings

> contextify@0.1.2 install C:\Program Files\nodejs\node_modules\jsdom\node_modul
es\contextify
> node-gyp rebuild


C:\Program Files\nodejs\node_modules\jsdom\node_modules\contextify>node "C:\Prog
ram Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\
bin\node-gyp.js" rebuild
info it worked if it ends with ok
spawn python [ 'C:\\Users\\perquet\\.node-gyp\\0.6.15\\tools\\gyp_addon',
  'binding.gyp',
  '-IC:\\Program Files\\nodejs\\node_modules\\jsdom\\node_modules\\contextify\\b
uild\\config.gypi',
  '-f',
  'msvs',
  '-G',
  'msvs_version=2010' ]
Traceback (most recent call last):
  File "C:\Users\perquet\.node-gyp\0.6.15\tools\gyp_addon", line 14, in ?
    import gyp
  File "C:\Users\perquet\.node-gyp\0.6.15\tools\gyp\pylib\gyp\__init__.py", line
 8, in ?
    import gyp.input
  File "C:\Users\perquet\.node-gyp\0.6.15\tools\gyp\pylib\gyp\input.py", line 14
, in ?
    import gyp.common
  File "C:\Users\perquet\.node-gyp\0.6.15\tools\gyp\pylib\gyp\common.py", line 1
08
    @memoize
    ^
SyntaxError: invalid syntax
ERR! Error: `gyp_addon` failed with exit code: 1
    at Array.0 (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\l
ib\configure.js:196:18)
    at EventEmitter._tickCallback (node.js:192:40)
ERR! not ok
npm WARN optional dependency failed, continuing contextify@0.1.2
jsdom@0.2.14 ./node_modules/jsdom
├── cssom@0.2.3
└── request@2.9.202

I'm on window 7 32 bits.

@stefek99

Any quick fixes? What version of node / jsdom should I install to get it running?


OSX 10.6.8
node --version
v0.6.15

npm view jsdom
latest: '0.2.14'

python --version
Python 2.6.1


    features   = JSON.parse(JSON.stringify(window.document.implementation._fea
                                                          ^
TypeError: Cannot read property 'implementation' of undefined
    at /Users/user1/node_modules/jsdom/lib/jsdom.js:171:59
    at Object.env (/Users/user1/node_modules/jsdom/lib/jsdom.js:262:5)
    at Request._callback (/Users/user1/Dropbox/Projects/NodeScraper/app.js:45:13)
    at Request.callback (/Users/user1/Dropbox/Projects/NodeScraper/node_modules/request/main.js:119:22)
    at Request.<anonymous> (native)
    at Request.emit (events.js:70:17)
    at Request.<anonymous> (/Users/user1/Dropbox/Projects/NodeScraper/node_modules/request/main.js:521:16)
    at Request.emit (events.js:67:17)
    at IncomingMessage.<anonymous> (/Users/user1/Dropbox/Projects/NodeScraper/node_modules/request/main.js:483:14)
    at IncomingMessage.emit (events.js:88:20)```
@Warpten
Warpten commented Apr 23, 2012

This actually is a contextify issue. I'm trying to install it with various versions of Python, ranging from 2.3.5 to 2.7.2

@eamason9629

I am also having trouble with this:
OSX 10.7.3
Node 0.6.10
JSDom 0.2.14

Thanks!

@nbunney
nbunney commented May 3, 2012

Any news on this. I am just starting with node.js and jsdom today and this is a nice 'howdoyado'. :-)

@nbunney
nbunney commented May 3, 2012

I just installed node 0.6.16 today and used npm to install everything else.

npm ls gives me

├─┬ http-agent@0.1.2
│ └── request@1.9.9
├─┬ jquery@1.7.2
│ ├── htmlparser@1.7.6
│ ├─┬ jsdom@0.2.14
│ │ └── cssom@0.2.3
│ └── xmlhttprequest@1.3.0
├─┬ jsdom@0.2.14
│ ├── cssom@0.2.3
│ └── htmlparser@1.7.6
└── request@2.9.202

@kamranayub

Hey everyone, I just ran into this error today and solved it.

All I did was install Python 2.7.3 (recommended by Contextify) and added my environment variables (PYTHONPATH, and added C:\Python27 to the end of my PATH variable).

I then reinstalled jsdom.

After that I ran the README test again and it worked!

@tmpvar
Owner
tmpvar commented May 9, 2012

awesome! thank you for looking into this @kamranayub!

@Warpten
Warpten commented May 9, 2012

Confirmed, working fix. Thanks a lot :)

@SunboX
SunboX commented May 10, 2012

Doesn´t work for me. :( I can´t install Python on www.cloud9ide.com ... :(

@smschauhan

This just doesn't make any sense. I just started with Nodejs a couple of days ago and am trying to work my way trying to build something. I required jsdom and it doesn't work at all due to contextify. Its a little early to start with something and end up fixing build errors :)
nodejs version - v0.6.18
jsdom - 0.2.14
Python - 2.7.3
I get the same error as warpten and stefek99. Please help.

@Warpten
Warpten commented May 27, 2012

Follow @kamranayub 's tip.

@smschauhan

That didn't seem to work work for me, but this helped.
npm install contextify -f
after installing Microsoft Visual Studio Express edition.

@kamranayub

Just wanted to mention that you could look at Cheerio if you didn't need all the fanciness of jsdom:

http://encosia.com/cheerio-faster-windows-friendly-alternative-jsdom

@smschauhan

Thanks! Cheerio looks good. I was in a bit of a hurry for setting up a prototype, so has to move to the express+jade combo. I will give Cheerio a shot now :)

@Leonidas-from-XIV

So there is no way to use jsdom without contextify at the moment? That's a pity, but thanks for the pointer to cheerio!

@eastridge

Ran into the same issue. sudo npm install contextify in the project using jsdom worked for me.

@robot1125

I have this issue as well. I think I've tried all of the above to some extent, although I might have missed one. Here are my stats:

Ubuntu 12.04
Python 2.7.3
Node v0.8.0
jsdom 0.2.15
contextify 0.1.3
request 2.10.0

Any other suggestions?

@DrBenton

Same issue on Windows 7 (64 bits) with Node v0.8.4.
Thankfully I have been able to replace the "jsdom" + "jQuery" combo with "Domino" + "Zepto Node" , which are 100% JavaScript libraries.

@JamesEggers1

I didn't have this issue until after I updated Node from v0.8.2 (I think) to v0.8.9 on my Win7 computer.

Python 2.7.3
Node 0.8.9
jsdom 0.2.15
-> contextify 0.1.3
request 2.10

I'm attempting to roll back my version of node to see if I can get it to work again without switching over to Domino/Zepto.

@tokudu
tokudu commented Sep 18, 2012

Thanks @DrBenton for the suggestion. Had to rely on Domino and Zepto Node to work around this for now.

@domenic
Collaborator
domenic commented Oct 5, 2012

This is a dupe of #456, and more evidence toward Contextify not being optional.

@domenic domenic closed this Oct 5, 2012
@mennovanslooten mennovanslooten referenced this issue in keeganstreet/element-finder Oct 17, 2012
Closed

Replace JSDOM and Sizzle with Cheerio #3

@ivankravchenko

On MacOS 10.8. Installed fresh Xcode and brew, python. Contextify fails to build.
This fixed for me.
export PATH=/Applications/Xcode.app/Contents/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/:$PATH
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include /usr/include
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/lib/* /usr/lib/
npm install contextify

@jonahkagan jonahkagan referenced this issue in lhagan/wintersmith-showdown Dec 30, 2012
Closed

Error installing with Python >= 3 #1

@destryalhmns

im sorry but this api is broke and this is the first api you find when you search for node.js jquery. as drbrenton pointed out domino + zeptune will get it done.

@domenic
Collaborator
domenic commented Jan 24, 2013

Yes, you need to be able to install native modules. If you're using Windows, that means Python + Visual Studio 2010 Express + a 32-bit version of Node. I know it sucks, but that's how Node.js works.

@niued
niued commented Feb 19, 2013

how to solve this problem?

@domenic
Collaborator
domenic commented Feb 19, 2013

@niued install the very latest jsdom version, with Contextify.

@mhhansen mhhansen referenced this issue in ecdeveloper/node-web-crawler Mar 6, 2013
Closed

Cannot read property 'implementation' of undefined #3

@bookchin

Don't know if this helps - but we were able to solve this by using contextify 0.1.3 instead of the latest. Since JSDOM is pointing at contextify 0.1.x it's pulling in 0.1.5 - which seems to be causing the problem (at least for us)

@civild civild referenced this issue in ryanflorence/ember-tools Apr 1, 2013
Closed

Problem with ember build #23

@nickgeorge

fwiw, I have this problem on ubuntu

@domenic
Collaborator
domenic commented Apr 3, 2013

@nickgeorge, what version of jsdom/node/npm, and do you get any errors when installing jsdom? What does npm ls list?

@mlilley
mlilley commented Apr 5, 2013

After having things work fine for a number of months with jsdom 0.4.1 and node 0.8.(approx 16?), I started receiving this error today, also. I had just upgraded to node 0.10.3 (latest).

Issuing "npm update" has fixed things. Now running (on Ubuntu 10.04):

  • jsdom 0.4.2
  • contextify 0.1.5

HTH

@frabcus
frabcus commented Apr 8, 2013

I'm having this problem too.

@gordonwritescode how did you override the version of contextify inside jsdom to 0.1.3?

Versions of things I have are:

...
├─┬ jsdom@0.3.4 
│ ├─┬ contextify@0.1.5 
│ │ └── bindings@1.1.0 
│ ├── cssom@0.2.5 
│ ├── cssstyle@0.2.3 
│ └── nwmatcher@1.3.1 
# node -v
v0.6.12
# npm -v
1.1.4
@frabcus
frabcus commented Apr 8, 2013

Aha! I've found a workaround for me. Which is to install version 0.5.4 of jsdom, after having already installed contextify 0.1.3 gobally. Like this:

npm install contextify@0.1.3; npm remove jsdom; npm install jsdom@0.5.4

It seems that 0.5.4 of jsdom was the one that changed from contextify@0.1.x to contextify@0.1.5
585c2cd#package.json

@Sirk
Sirk commented May 25, 2013

I too find a workaround for this. I rebuild my npm-shrinkwrap with contextify in first in my package.json dependencies.

"dependencies" : {
    "contextify":"0.1.3",
    "express":"3.1.0",
    "jsdom":"0.5.4"
},

So deleting my node-modules directory and my npm-shrinkwrap.json and then

npm shrinkwrap

and

npm install
@jsolis
jsolis commented Feb 16, 2014

Even though it's 2 years later, thanks @kamranayub for your comments. I don't have root access on the box I'm running this on and so I couldn't upgrade the version of python. The HTML I was parsing was static so Cheerio was a perfect fit for me. You've saved me tons of dev time!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment