2016-12-04 84 views
2

在我的項目中,我需要一個usbkey來登錄。 usbkey的接口是Activex。 jQuery的方式,代碼就像下面:如何在Reactjs中使用ActiveX?

<html> 
    <object style='display:none' 
     classid='clsid:28540C7-D724-4156-9E42-12BD' 
     codebase='Active/RaActive.CAB#version==-1,-1,-1,-1' 
     id='Ctrl'></object> 
    <scrpit> 
     $(document).ready(function() { 
     Ctrl.initUxtApi(); 
     } 
    </scrpit> 
</html> 

我怎樣才能改變它reactjs方式? 以下代碼是我的反應方式,但我認爲這不是一個好方法。

class USBKey extends Component { 

componentDidMount() { 
const Ctrl = document.getElementById('Ctrl'); 
console.log(Ctrl); 
let loginflag = -1; 
loginflag = Ctrl.initUxtApi(); 
console.log(loginflag); 
} 

activeX() 
{ 
    return {__html: '<object style=\'display:none\' 
classid=\'clsid:1221012-212-4156-9E42-121212\' ' + 
'codebase= \'/RaActive.CAB#version==-1,-1,-1,-1\' ' + 
' id=\'Ctrl\'></object>'} 
}; 

render() { 
return (
    <div> 
    <div dangerouslySetInnerHTML={this.activeX()} /> 
    </ div > 
);} 
} 

我會從UsbKey讀取認證並將其發送到雲端。 就像這樣: Ctrl.readCert();

+0

我的英文很差,如果你ca n糾正我的表情!請幫助我,我會認真的! –

+1

你可以展示一些你的反應代碼或你正在嘗試做什麼? – Chris

+0

我會通過ActiveX從UsbKey讀取認證。 –

回答

0

聲明,我不使用ActiveX的工作,但我相信你可以這樣做:

的index.html

// outside of React 
// leave this as is, it doesn't need to be inside react to use it 
// in react 
<object style='display:none' 
    classid='clsid:28540C7-D724-4156-9E42-12BD' 
    codebase='Active/RaActive.CAB#version==-1,-1,-1,-1' 
    id='Ctrl'></object> 

// Your react mount point 
<div id="app"></div> 

app.js

class USBKey extends Component { 

    constructor(props) { 
     super(props); 
     this.state = { loginFlag: -1 }; 
    } 

    componentDidMount() { 
     const Ctrl = document.getElementById('Ctrl'); 
     this.setState({ 
      loginFlag: Ctrl.initUxtApi(), 
     });   
    } 

    render() { 
     return <div>{this.state.loginFlag}</div> 
    } 
}