27

I have been developing an AJAX application using jQuery and Microsoft Seadragon technology.
I need to have access to the html5 canvas function toDataURL.

With Google Chrome, the same origin rule applies to this function which means that a page run locally (with the file:/// in the URL) failed to satisfy the same origin rule and an exception is thrown.

With Chrome 7, starting the application with --allow-file-access-from-files option, allows to call canvas.toDataURL() from local files.

However, it seems that starting the Chrome Beta 8 with the same option (--allow-file-access-from-files) does not allow the call canvas.toDataURL() on the local file.

Does Chrome gave up on the --allow-file-access-from-files option or it has just been disabled since it is a Beta release and not a full release?

Thanks!

Alexander
  • 23,432
  • 11
  • 63
  • 73
Alexandre
  • 507
  • 1
  • 5
  • 16

5 Answers5

46

Looking at the issues for this shows that the whole --allow-file-access-from-files thing was rushed.

  1. "Firefox does it.."
  2. "How can we do it?"
  3. some time passes
  4. "Here are the patches"
  5. "Passes! On trunk wonder what happens in the next dev release"
  6. "Ahhh it's broken" "Use the command line option" "ok"
  7. "We shipped!"
  8. "WTF guys? You broke all my stuff! Why didn't you tell us earlier?"
  9. silence

On to your Problem
Indeed it seems that this is something special to the beta, I'm using Chrome 8.0.552.5 dev here and --allow-file-access-from-files works like expected, I've also tested this with Chromium 9.0.592.0 (66889) were it also works as expected.

I suspect there have been some changes on the dev branch. Unfortunately, finding something on chromium's issue tracker is nearly impossible.

Mahmoud Al-Qudsi
  • 28,357
  • 12
  • 85
  • 125
Ivo Wetzel
  • 46,459
  • 16
  • 98
  • 112
  • 1
    How can you do the `--allow-file-access-from-files` thing? I don't really understand how that works. – temporary_user_name Aug 28 '13 at 00:18
  • 1
    @Aerovistae, A. open your Chrome shortcut's properties, add that to the target: `"...\chrome.exe --allow-file-access-from-file"` (notice the quotes) || B. using your Command Prompt, run Chrome with the tag `...\chrome.exe --allow-file-access-from-file` – Daniel Cheung Jan 19 '15 at 10:55
  • @Aerovistae, and esacpe "(" and " " with `^(` and `^ ` if you are using cmd – Daniel Cheung Jan 19 '15 at 11:15
22

Did you close all chrome instances before opening with the command line argument? You have to do that to make that parameter work.

Guillaume86
  • 14,341
  • 4
  • 53
  • 53
10

To summarize all answers so far.

Before running chrome, make sure there are no chrome processes running.

Windows

-allow-file-access-from-files

(with one dash)

Linux

--allow-file-access-from-files

(with two dashes)

T J
  • 42,762
  • 13
  • 83
  • 138
Vanuan
  • 31,770
  • 10
  • 98
  • 102
  • This + closing all open windows was the only way it worked on windows. – dtroy Oct 18 '12 at 12:34
  • One dash does the trick for me, on Chrome Version 34.0.1847.116 m. I used 'tskill chrome' before running the command to make sure all Chrome windows were closed. – Jason Apr 21 '14 at 21:24
1

I've found a way around the issue using a JavaScript/Flash approach. If flash is compiled in the Local Only security sandbox, it has full access to local files. Using ExternalInterface, JavaScript can request a Flash Application to load a file, and Flash can pass the result back to JavaScript.

You can find my implementation here: https://code.google.com/p/flash-loader/

-1

The trick that woked for me is that you have to give the absolute path of the file and not just file name in your HTML code. e.g file://... instead of direct name even though you are accessing the file in the same directory. It will work!

Johnydep
  • 6,027
  • 20
  • 57
  • 74
  • 1
    Not sure what version of chrome but 27 gives the following error: "Cross origin requests are only supported for HTTP." – Rob Jun 13 '13 at 16:20