davidshimjs / qrcodejs

Cross-browser QRCode generator for javascript
MIT License
13.5k stars 4.75k forks source link

Cannot read properties of undefined (reading '_android') #292

Open Cyclodex opened 1 year ago

Cyclodex commented 1 year ago

Hi! 👋

Firstly, thanks for your work on this project! 🙂

Today I used patch-package to patch qrcode-js-package@1.0.4 for the project I'm working on.

My issue was, after updating to Vue 2.7.13 and @vue/cli 5.0.8 the generated JS code throws an error, because "this" is undefined when running this line: if (this._android && this._android <= 2.1) {

I think its related to js modules and this is always undefined on global level.

Here is the diff that solved my problem:

diff --git a/node_modules/qrcode-js-package/qrcode.js b/node_modules/qrcode-js-package/qrcode.js
index f89e602..d5e5bd9 100644
--- a/node_modules/qrcode-js-package/qrcode.js
+++ b/node_modules/qrcode-js-package/qrcode.js
@@ -281,7 +281,7 @@ var QRCode;

        // Android 2.1 bug workaround
        // http://code.google.com/p/android/issues/detail?id=5141
-       if (this._android && this._android <= 2.1) {
+       if (this && this._android && this._android <= 2.1) {
            var factor = 1 / window.devicePixelRatio;
            var drawImage = CanvasRenderingContext2D.prototype.drawImage; 
            CanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) {

This issue body was partially generated by patch-package.

Sun-hai-yang commented 1 year ago

Have you solved this problem yet?

Cyclodex commented 1 year ago

@Sun-hai-yang What do you mean exactly? The problem can be fixed with the above "patch".

Do you need to know how you can apply it to your own codebase?

IvanVZabrodin commented 1 year ago

For me it still gives the same issue, even after the fix

hotdogc1017 commented 11 months ago

I have the same problem as you🥲

hotdogc1017 commented 11 months ago

I have found a solution! Replace 'qrcodejs2' with 'qrcodejs2-fix`

in package.json: "qrcodejs2": "^0.0.2", // remove "qrcodejs2-fix": "^0.0.1", // add

hotdogc1017 commented 11 months ago

I have found a solution! Replace 'qrcodejs2' with 'qrcodejs2-fix`

in package.json: "qrcodejs2": "^0.0.2", // remove "qrcodejs2-fix": "^0.0.1", // add

I have checked the source code of the error location and the solution is consistent with @Cyclodex proposed method

Minori-ty commented 7 months ago

the same problem