tangledhelix Posted August 8, 2017 Share Posted August 8, 2017 I have an Alfred workflow based on a JXA script. It acts as a control mechanism for focusatwill.com (an online music streaming service). It has basic functionality, play/pause, skip track... This was working fine in an earlier version, interacting with the page using query selectors, e.g. tab.execute({ javascript: "document.querySelector('.playerControls .playButton').click();" }) This site recently refactored their UI to use React. My basic controls still work (using querySelector), but one part of the setup (changing the genre) has broken. It used to use querySelectorAll for this task, but in the new React UI, the controls I need to reach don't exist unless you click in the UI ... In any case, the developers exposed an API in the site code, so I can do stuff like window.faw.play() window.faw.skip() window.faw.genre(genreId) And doing that in the developer console in Chrome works fine. But if I try to do the same using tab.execute in JXA (from Alfred), nothing happens. I'm guessing that I'm running afoul of the security model in Chrome. Does anyone know if what I'm trying to do is even possible (from Alfred/JXA)? Or am I going to have to try to do this as a Chrome extension instead? If it's helpful, here is the repository: https://github.com/tangledhelix/focusatwill-in-google-chrome And there's some discussion between me and someone at focusatwill.com on this commit: https://github.com/tangledhelix/focusatwill-in-google-chrome/commit/eb339cba143cdbc2593c73869e11bcd70f18042a Link to comment
vitor Posted August 8, 2017 Share Posted August 8, 2017 8 hours ago, tangledhelix said: But if I try to do the same using tab.execute in JXA (from Alfred), nothing happens. What if you do it from the Script Editor? Does it work? As someone who has written a fair share of JXA to interact with Chrome, some findings: Some code works fine via execute, while some does not. What seems to work best is instead of tab.execute({javascript: js_code}), doing tab.url = 'javascript:' + js_code (will run like a bookmarklet). Code can have different results when run from the Script Editor vs osascript (either in a Terminal, or Alfred). For one of these cases, to get it to work from outside the Script Editor I had to export the code as an app and it has to appear on the Dock (if I change the plist so that the app does not appear on the Dock, the code behaves differently). Link to comment
tangledhelix Posted August 8, 2017 Author Share Posted August 8, 2017 Thanks, vitor! To answer your question, no, it did not work any differently in Script Editor. I assume I was simply running afoul of the browser's security model. Your suggestion to use tab.url worked out great, though. I am ready to push out a new version, it is all functional again. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now