Как позволить qt вызову webengine реагировать на компонентную функцию - PullRequest
1 голос
/ 14 мая 2019

У меня проблема API RunJavaScript4 не может вызвать функцию, когда я нажимаю кнопку, связываю функцию js на странице, отображаемую по реакции. Функция журнала консоли goOnPkg не определена

QT версия 5.10

код в файле go:

channel := webchannel.NewQWebChannel(nil)
channel.RegisterObject("pkgBridge", qmlBridge)
wv.Page().SetWebChannel2(channel)
qmlBridge := NewQmlBridge(nil)
qmlBridge.ConnectSendToGo(func(data string) string {
  ap.WebView.Page().RunJavaScript4(fmt.Sprintf("%s('%s')", funcName, data))
})

код в реагирующем компоненте:

export  function go0nPkg(id) {
    console. log("golang can' t call this function successfully") ;
    console. log(id);
}

@Form.create()
class PkgDoPkgList extends React Component {
constructor(props) 
componentDidMount( ) {}
handlePkgBtnClick = (id, actionId, action) => {
let action_obj = { "action": action, "action_id": actionId};
let action_json = JSON.stringify(action_obj );

new QWebChannel(qt.webChannelTransport, function (channel)  {
    pkgBridge = channel.objects.pkgBridge;
    window.bridge = pkgBridge;
    window.bridge.sendToGo(action_json);
}
render() {}
export default PkgDoPkgList;

golang не может успешно вызвать функцию в реагирующем компоненте. -_-!

1 Ответ

0 голосов
/ 15 мая 2019

ага, я решил эту проблему.

  1. в js-файле, мы должны экспортировать экземпляр класса React в окно.
import xxx;

//...

window.updateValue = function(url) {
    alert("call ok !");
    // if(window.callback != undefined) {
    //    window.callback.updateValue(url);
    // }
};

window.setCallback = function(callback) {
    window.callback = callback;
}

//...

export default class MyFeedback extends React.Component {

   //...
   // key step
   //  in react life cycle `componentWillMount` set `this` :
   componentWillMount() {
         window.setCallback(this);
   }

  //...

}

в файле go, мы вызываем функцию следующим образом:
ap.WebView.Page().RunJavaScript4("window.updateValue('hello')")

после запуска проекта.я вижу предупреждение call ok!.101

См. Ссылку: https://blog.csdn.net/ZHOUYONGXYZ/article/details/82760929

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...