Comments (16)
Ok guys. 1.1.11
, the most 1ish version ever released was just pushed to npmjs.
Let me know if it works for you 😄
from gmail.js.
Hey there and thanks for the bug-report.
I've tested and I can reproduce. I've given this a little run in the debugger and it seems to be timing-related.
That is, our selectors are correct, but we are trying to look for a HTML element which has not yet been inserted when our code runs.
There may be different (and better) ways to fix this, but I managed to get the event triggering by making this small change:
// class depends if is_preview_pane - Bu for preview pane, nH for standard view,
// FIXME: the empty class ("") is for emails opened after thread is rendered (causes a storm of updates)
class: ["Bu", "nH", ""],
- sub_selector: "div.adn",
handler: function(match, callback) {
- match = new api.dom.email(match);
- callback(match);
+ setTimeout(() => {
+ match = match.find("div.adn.ads");
+ if (match.length) {
+ match = new api.dom.email(match);
+ callback(match);
+ }
+ }, 0);
}
},
This probably should be looked into a bit deeper, and a new version will need to be released.
Do you have the ability to help out testing the above patch on your end?
from gmail.js.
Seems like you are a week ahead of me then, in terms of debugging, fixing and testing.
PRs are definitely welcome.
from gmail.js.
Here it is:
bchenhs/gmail.js-fork#1
Notes:
- There is one outstanding issue, where only get the first 5 unread messages in a thread gets registered. We don't have a solution on this yet.
from gmail.js.
@josteink I've tried your draft fix from this comment and it works fine for both private and GSuite accounts.
I think it could be more safe to fix particulalry this handler instead of changing insertion_observer
implementation, as some applications may rely on immediate reaction to DOM changes.
from gmail.js.
I've always been doing that anyway (making the event-handler idempotent), since thread rendering in Gmail does not seem to be entirely deterministic.
It's probably for the best 😃
from gmail.js.
We ran into this earlier and found a workaround. There are two parts to the fix:
- Insert the setTimeout to yield and let Gmail view to render. We placed it here where
insertion_observer
is invoked. - Update the insertion_observer implementation to handle all message elements within a thread correctly:
if (element.length) {
var handler = config.handler ? config.handler : function(match, callback) { callback(match); };
let idx;
for (idx = 0; idx < element.length; idx++) {
// console.log( "inserted DOM: class match in watchdog",observer,api.tracker.watchdog.dom[observer] );
api.observe.trigger_dom(observer, $(element[idx]), handler);
}
}
Notes:
- We haven't fully tested this, especially on a Gmail account on an old behaviour.
from gmail.js.
@josteink I don't seem to have permission to push a branch here. Are there steps to follow to contribute?
from gmail.js.
For now just fork and create a regular "external" PR from your own repo.
I can review, merge and push here.
from gmail.js.
I appreciate the effort, but it seems to me you didn't create a "linked" fork by clicking the fork button in the upper right region of this repo.
When you do that you can create pull requests (patches for review) straight back to this repo without any special access.
GitHub has docs on this, and I'm sure there are lots of guides on YouTube too.
Check this out, and see if you can make the PR show up in this repo? 🙂
from gmail.js.
@josteink I've tried your draft fix from this comment and it works fine for both private and GSuite accounts.
I think it could be more safe to fix particulalry this handler instead of changing
insertion_observer
implementation, as some applications may rely on immediate reaction to DOM changes.
That's great news!
I'm kinda busy at a conference now though.
If someone could prep a PR which contains the following:
- actual fix
- updated version in package.json
- updated change-log
If someone does that, I'll try to get it merged and pushed to npmjs as soon as I can, possibly later today.
Do you think you can do that, @onestep ?
from gmail.js.
Hello guys. It works now, the event is fired, but it is fired 4 times and sometimes 3 times when you open an email.
from gmail.js.
@ionh : Can you test this with the latest PR from @cancan101 ?
from gmail.js.
Sorry guys for the long response, just managed to pull the latest version which includes #767, unfortunately, the event continues to be fired 3 times in a row. For me is not a problem, my script just adds a button on the page after the email is opened, so I did a workaround, if the button is already added do not run the script on every triggered event.
from gmail.js.
Hi @josteink , this problem is very important to me, I have used the latest version (v1.1.12) but this problem still occurs. Do you have any pr for quick modifications to it? I can refer to the modification section to quickly apply it to my project. Thanks!
from gmail.js.
My suggestion above was above making changes to your own extension to make sure you, in your code, handle the event in a way where (depending on your needs), the crucial code on your part is only triggered once.
There's currently no PR or fix for this. If someone wants to fix this and provide a PR, I will be happy to merge it and provide a new release.
from gmail.js.
Related Issues (20)
- Synchronous 'DOMNodeInserted' DOM Mutation Event is deprecated HOT 3
- Synchronous 'DOMSubtreeModified' DOM Mutation Event is deprecated HOT 3
- Reloading window makes the the user email undefined HOT 2
- gmail.observe.on("compose") observer returns type of "compose" when reply button is clicked HOT 6
- How to Utilize the "make_request" and "make_request_async" Methods?
- Button added to toolbar in Gmail label page shows for few seconds & gets hidden (by Gmail)
- `recipient_change` hook throws console errors when compose is closed
- Detecting attachment open from search list HOT 1
- "view_email" event fires twice HOT 1
- Gmail change for innerHTML HOT 36
- Update header before send request HOT 2
- Error in the function: gmail.tools.add_compose_button HOT 7
- Error in the function compose.body() HOT 3
- Nonstop requests sent to play.google.com HOT 1
- api.get.user_email does not work with non-workspace email addresses
- GmailJS library (1.1.14) is failing to load (with error in console) HOT 1
- GmailJS method add_toolbar_button is not working HOT 3
- why this project can not be used at the server side with node? HOT 1
- Detect dark mode HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gmail.js.