On 24/12/2024 21:23, Ihor Radchenko wrote:
Max Nikulin writes:javascript:location.href='org-protocol://store-link?'+new URLSearchParams({url:location.href, title:document.title}); void(0);If you think that ";void(0)" variant is less prone to errors then I may update my patch. I have no idea if balanced void(...) parenthesis around the whole expressions would cause more user mistakes. Otherwise both variants are equivalent.Then, no need to change your variant.
I changed the patch to trailing ";void(0)" and I have found a typo in first variant of the patch.
Should ORG-NEWS be updated as well?
I have realized that an example in ORG-NEWS is incomplete and so it does not require update.
I consider the change as a minor fix that does not deserves loud announcement, especially taking into account that browsers discourages protocol handlers launched on behalf of web pages nowadays.
[...]
In this case, it is a good idea for users of the previously suggested bookmarklet to update to the new version. This way, they will be less likely to meet breakage one day when they decide to upgrade Firefox.
Users do not decide when they update a major browser. Security fixes arrive at least once a month or even more often. This particular change has been backported to the ESR channel, so it is too late to notify users through ORG-NEWS.
I have had a look into Firefox bug tracker. Behavior in respect to external protocol handlers has changed during a couple of years. Some of latest issues are not public.
From 6e5eb4c0aedd2ab90df6f6772ded355ccb9195a4 Mon Sep 17 00:00:00 2001 From: Max Nikulin <maniku...@gmail.com> Date: Mon, 16 Dec 2024 21:46:49 +0700 Subject: [PATCH v2] org-protocol: Add void(0) to bookmarklets * doc/org-manual.org (The store-link protocol): (The capture protocol, The open-source protocol): * lisp/org-protocol.el (org-protocol-store-link): (org-protocol-capture, org-protocol-open-source): Update javascript: bookmarklets to discard assigned value. Firefox-133 and Firefox-128.5 ESR does not discard value assigned to window.location anymore and use it as document content to render instead. Reported by: Rehan Deen. [BUG] Org-protocol bookmarklets in Firefox behaving badly after recent upgrade. Thu, 12 Dec 2024 13:42:34 +0530. Link: <https://list.orgmode.org/87pllx7219....@gmail.com> --- doc/org-manual.org | 9 +++++---- lisp/org-protocol.el | 21 +++++++++++---------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/doc/org-manual.org b/doc/org-manual.org index 1b3c33f96..2d5fd57b3 100644 --- a/doc/org-manual.org +++ b/doc/org-manual.org @@ -21327,14 +21327,14 @@ *** The ~store-link~ protocol #+begin_example javascript:location.href='org-protocol://store-link?' + - new URLSearchParams({url:location.href, title:document.title}); + new URLSearchParams({url:location.href, title:document.title});void(0); #+end_example Title is an optional parameter. Another expression was recommended earlier: #+begin_example javascript:location.href='org-protocol://store-link?url='+ - encodeURIComponent(location.href); + encodeURIComponent(location.href);void(0); #+end_example The latter form is compatible with older Org versions from 9.0 to 9.4. @@ -21359,6 +21359,7 @@ *** The ~capture~ protocol new URLSearchParams({ template: 'x', url: window.location.href, title: document.title, body: window.getSelection()}); + void(0); #+end_example You might have seen another expression: @@ -21367,7 +21368,7 @@ *** The ~capture~ protocol javascript:location.href='org-protocol://capture?template=x'+ '&url='+encodeURIComponent(window.location.href)+ '&title='+encodeURIComponent(document.title)+ - '&body='+encodeURIComponent(window.getSelection()); + '&body='+encodeURIComponent(window.getSelection());void(0); #+end_example It is a bit more cluttered than the former one, but it is compatible @@ -21400,7 +21401,7 @@ *** The ~open-source~ protocol #+begin_example javascript:location.href='org-protocol://open-source?&url='+ - encodeURIComponent(location.href) + encodeURIComponent(location.href);void(0) #+end_example #+vindex: org-protocol-project-alist diff --git a/lisp/org-protocol.el b/lisp/org-protocol.el index 85c9a0cc5..1d3bb7e71 100644 --- a/lisp/org-protocol.el +++ b/lisp/org-protocol.el @@ -101,15 +101,15 @@ ;;; Commentary: ;; new URLSearchParams({ ;; url: location.href, ;; title: document.title, -;; body: window.getSelection()}) +;; body: window.getSelection()});void(0) ;; ;; Alternatively use the following expression that encodes space as \"%20\" ;; instead of \"+\", so it is compatible with Org versions from 9.0 to 9.4: ;; -;; location.href='org-protocol://sub-protocol?url='+ +;; javascript:location.href='org-protocol://sub-protocol?url='+ ;; encodeURIComponent(location.href)+'&title='+ ;; encodeURIComponent(document.title)+'&body='+ -;; encodeURIComponent(window.getSelection()) +;; encodeURIComponent(window.getSelection());void(0) ;; ;; The handler for the sub-protocol \"capture\" detects an optional template ;; char that, if present, triggers the use of a special template. @@ -437,14 +437,14 @@ (defun org-protocol-store-link (fname) The location for a browser's bookmark may look like this: javascript:location.href = \\='org-protocol://store-link?\\=' + - new URLSearchParams({url:location.href, title:document.title}); + new URLSearchParams({url:location.href, title:document.title});void(0); or to keep compatibility with Org versions from 9.0 to 9.4 it may be: javascript:location.href = \\ \\='org-protocol://store-link?url=\\=' + \\ encodeURIComponent(location.href) + \\='&title=\\=' + \\ - encodeURIComponent(document.title); + encodeURIComponent(document.title);void(0); Don't use `escape()'! Use `encodeURIComponent()' instead. The title of the page could contain slashes and the location @@ -482,20 +482,21 @@ (defun org-protocol-capture (info) new URLSearchParams({ url: location.href, title: document.title, - body: window.getSelection()}) + body: window.getSelection()});void(0) or to keep compatibility with Org versions from 9.0 to 9.4: javascript:location.href = \\='org-protocol://capture?url=\\='+ \\ encodeURIComponent(location.href) + \\='&title=\\=' + \\ encodeURIComponent(document.title) + \\='&body=\\=' + \\ - encodeURIComponent(window.getSelection()) + encodeURIComponent(window.getSelection());void(0) By default, it uses the character `org-protocol-default-template-key', which should be associated with a template in `org-capture-templates'. You may specify the template with a template= query parameter, like this: - javascript:location.href = \\='org-protocol://capture?template=b\\='+ ... + javascript:location.href + = \\='org-protocol://capture?template=b\\='+ ...;void(0) Now template ?b will be used." (let* ((parts @@ -556,13 +557,13 @@ (defun org-protocol-open-source (fname) The location for a browser's bookmark should look like this: javascript:location.href = \\='org-protocol://open-source?\\=' + - new URLSearchParams({url: location.href}) + new URLSearchParams({url: location.href});void(0) or if you prefer to keep compatibility with older Org versions (9.0 to 9.4), consider the following expression: javascript:location.href = \\='org-protocol://open-source?url=\\=' + \\ - encodeURIComponent(location.href)" + encodeURIComponent(location.href);void(0)" ;; As we enter this function for a match on our protocol, the return value ;; defaults to nil. (let (;; (result nil) -- 2.39.5
