- From: Melvin Carvalho <melvincarvalho@gmail.com>
- Date: Wed, 1 Jan 2014 23:07:26 +0100
- To: Sébastien Lorber <sebastien@stample.co>
- Cc: public-rww <public-rww@w3.org>
- Message-ID: <CAKaEYhKJMmbDZ2YUveeBQBXDK0tZ-4a8vkkUiNFkugBj0TD5Cw@mail.gmail.com>
On 27 December 2013 22:15, Sébastien Lorber <sebastien@stample.co> wrote: > Hi all, > Hi & welcome to the group! :) > > I'm working with Henry and I'm trying to build a Single Page Application > (SPA) that can navigate to the RWW. > I can't find an elegant way to handle deep linking (possibility to > bookmark/share the url) without reloading the whole page, which is not > really a modern user experience. > > > > Suppose I have an RDF resource located at http://sub.rwwserver.io/resource > > The server actually detects that it's a browser with Accept prefering html > content, so it sends some generic html page with some JS in it that will > refetch the resource in RDF format, and startup the SinglePageApp to render > that RDF graph. > > This is a SinglePageApp so we aim to not refresh the page and reload the > app as we navigate through the RDF graphs. > > > If this resource is a foaf profile: > http://sub.rwwserver.io/profile > Then on my SPA can eventually click on a friend of this foaf profile > (foaf:knows) which will lead to a rendering the friend data, on which you > can also click on one of its friends... > > When rendering a friend, as we are in a SPA, the url remain > http://sub.rwwserver.io/profile > So if I want to bookmark or share the friend's page, I can't simply use > the browser current url. > > > If the rendered friend is part of the subdomain, with HTML5 history > pushState (or History.js) it is possible to modify the url and add an > history element. > > So if the first user to render is > http://sub.rwwserver.io/profile1 > And then we render its friend > http://sub.rwwserver.io/profile2 > it is possible to change the current url to profile2 url without reloading > the page, even if the loaded page was profile1 url > > But it's not possible to change the url without reloading if the url to > set is on another domain or subdomain. This is a security issue because if > you go to hacker.com, the site could change the url to yourbank.com and > do some fishing more easily. > > > > > > > So what is the solution to build modern JS RDF applications (SPA) and be > able to solve this deep linking problem? > > > We could probably change the url when the domain is the same, and redirect > to the new resource to render when the domain is different. That wouldn't > always redirect in many cases, particularly when the user navigate in its > own content for exemple. > But when dealing with stuff like navigating in social networks and foaf > profiles, it is very probable that the domain will often change between > users... > > > > > > > > Js frameworks like Angular and Backbone usually use the url hash to > perform routing and solve this deep linking problem. > > So I may be able to use something like that: > > http://sub.rwwserver.io/profile#currentResource=http://otherrww.io/otherprofile > This way the url becomes bookmarkable and shareable, but the problem is > it's not really the true resource url that you share, and that many urls of > this kind (with hash) could point to the same resource url: > > http://sub.rwwserver.io/someContent#currentResource=http://otherrww.io/otherprofile > > http://test.rwwserver.io/#currentResource=http://otherrww.io/otherprofileThiskind of defeat the original goal of an url I guess. > > And if the first url is not available anymore, the link won't work, even > if the targeted resource is still available... > > > > In addition, in my opinion, an user should be able to "choose" the > application he wants to open an RDF resource, as we can currently do in OS: > you can open .doc files with Word or OpenOffice, and have a default > prefered app. So many SPA could be used to render the same foaf profile. > > If I choose app1 to render a profile, app1 may create a > #currentResource=url . and then I can send the link to someone. > But this other person may prefer to renderprofiles with app2, and maybe > app2 is not able to understand the hash semantics used by app1 for deep > linking, so it will render the original profile and not the profile in > #currentResource=url > > This could eventually become a hacky standard for building RWW SPA, to use > the same hash semantics. > But another problem is ACL. If I share a link > originalResource#currentResource=url > then i have myself access to originalResource, but the other user may not > have access so the server won't load any SPA even if that other user have > access to the targeted resource > > It could perhaps be done at the RWW server level (not sure, the url hash > is sent?) so that the server automatically redirect the client to the > targeted resource (without checking ACLs on the original) if it detects the > #currentResource=url fragment > But this doesn't solve: > - the RWW server could be down > - the url is ugly > > > > > > > > Do you see any solution to this problem? > > > One solution could be to have some kind of equivalent of: > Access-Control-Allow-Origin: * > lke > Access-Control-Allow-History-PushState: * > implemented on browsers and added on RWW server responses, but it wouldn't > really prevent fishing because hacker.com could change the url to > http://rwwserver.io/myBankAccount and show credit card forms... > Maybe this can be used only on non-sensitive RDF resource url > > What do you think? > Very interesting use case, thanks for raising it. We have the same issue in tabulator. I wonder if the ideal solution would be something like when the browser asks you for your location. There could be a popup saying: "This site wishes to change the value in your address bar" - Allow once - Always allow The issue might be then that the value in the address bar may not match the actual content, so perhaps a little signal could appear next to the address to show that it is not definitive. Do you think that would work? PS Regarding using the # character, whatever is after the hash should never been seen by the server, but you can use a ? like in: http://graphite.ecs.soton.ac.uk/browser/?uri=http%3A%2F%2Fmelvincarvalho.com%2F > Thanks > > > >
Received on Wednesday, 1 January 2014 22:07:55 UTC