views:

1056

answers:

2

Hi, I am trying to create a small facebook app and associate it to a fan page in a tab. I am trying to include an external javascript file in my page and call a method on a button click event.

Below is a part of the code

<script language="Javascript" src="http://mysite.com/fb.js"&gt;&lt;/script&gt;
<input type="button" value="Click....." onClick="javascript:showDialog();" />

content of fb.js is as below

function showDialog() {
    new Dialog().showMessage('Dialog', 'Button clickeed');
}

When I load the tab in my fan page, it shows an error "Cannot allow external script", whereas when I load the canvas url [http://apps.facebook.com/...] directly and click on the button, it works [shows the dialog].

Does script include works only on the canvas and not on the profile page?

I have another question though Initially I had the script src as a relative path but it errored out with the same error - "Cannot allow external script". Can't I use relative path for the external scripts?

A: 

It's bound to be related to the specific behavior of application tabs.

Application tabs are slightly different than canvas pages. When a user first goes to a tab, it is in passive mode. This means applications cannot autoplay Flash or onload JavaScript. Once user interacts with the tab – like clicking the Flash object, the page becomes active, so it can play Flash, execute JavaScript, and so forth.

Looks like for application tabs, it needs to be embedded in the FBML and not an external resource.

Peter Bailey
Thanks Peter, but I am not firing any onLoad event on the page load in the above example.My real application will have more JS content and separating it out in an external JS makes more sense from maintainability point of view.
santhakr
A: 

Could this not be the problem? http://developers.facebook.com/docs/fbjs

"Most providers who allow developers to embed JavaScript within their domain force developers to use IFrames to sandbox their code. Facebook has taken a different approach to this problem. JavaScript that you give us gets parsed, and any identifiers (function and variable names) get prepended with your application ID."

Martin