Comments (5)
See #9
ReactSWF is not involved in this and there's nothing ReactSWF can do that isn't opinionated/intrusive and would require special code built into the SWF.
Flash Player can only call functions exposed on window, so you're left with two choices:
- Each instance should store a uniquely named function on
window
, saymy_swf_cb_123456()
. Then pass the function name in flash-vars to the SWF. - Export a named function on
window
with an extra ID parameter, saymy_swf_cb(id)
. Each instance should generate a unique ID and store the ID and instance in a map used bymy_swf_cb
. Then pass the ID in flash-vars to the SWF. - EDIT If there's only ever once instance, just store a bound callback on
window
and call that from the SWF.
I'm refactoring ReactSWF a bit and I may end up providing this functionality through a separate complementary module, but due to the design of FlashPlayer this is not something ReactSWF should provide.
EDIT: You cannot pass functions through flashVars because it has to be serialized into a string and passed to FlashPlayer.
from react-swf.
Hmm... it could make sense to have ReactSWF detect functions passed in flash-vars and special-case them perhaps. I'll think about this.
from react-swf.
Oh right facebook/react#4000 prevents this from being a good idea at the moment.
from react-swf.
const SWF_ID_PREFIX = '__MyExternalInterfaceExample_SWFID_';
const SWF_CALL_NAME_PREFIX = '__MyExternalInterfaceExample_SWFCall_';
let nextUID = 0;
class MyExternalInterfaceExample extends React.Component {
constructor(props) {
super(props);
// For most purposes nextUID is sufficient. However, if you rely on
// non-trivial server rendering you must generate deterministic UIDs per
// React root to avoid markup mismatch.
this._uid = nextUID++;
window[SWF_CALL_NAME_PREFIX + this._uid] = this.handleSWFCall.bind(this);
}
componentWillUnmount() {
delete window[SWF_CALL_NAME_PREFIX + this._uid];
}
handleSWFCall() {
// Beware; SWF calls are executed in the context of SWF Player.
console.log('SWFCall', arguments);
return 'foobar';
}
invokeSWFMyCallback(arg) {
// Beware; SWF Player does not sufficiently escape serialized arguments.
return this._swfPlayerNode.myCallback(arg);
}
render() {
// Globally unique ID is required for ExternalInterface callbacks in IE<11.
return (
<ReactSWF
...
ref={c => this._swfPlayerNode = c}
id={SWF_ID_PREFIX + this._uid}
flashVars={{myCallbackName: SWF_CALL_NAME_PREFIX + this._uid}}
/>
);
}
}
from react-swf.
thanks a lot!
from react-swf.
Related Issues (15)
- Finalize public API
- React 0.14 "component classes must extend React.Component" HOT 1
- React Dependency HOT 3
- React v15, parameters not respected HOT 2
- Because React v16 remove React.PropTypes, react-swf does't work well HOT 3
- Can't interact with SWF HOT 11
- Problem using in React Native: View config not found for name HOT 2
- Verify accuracy of Flash Player version detection
- add react-component keyword (for npm) HOT 1
- "ReferenceError: React is not defined" when building with browserify. HOT 3
- Not working in Firefox HOT 2
- Update SWF Object HOT 2
- Not Triggering Firefox ExternalInterface Callback HOT 4
- Call function from Flash HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-swf.