Flutter 颤振IFrameElement不改变震源

Flutter 颤振IFrameElement不改变震源,flutter,flutter-web,Flutter,Flutter Web,我已经创建了以下无状态小部件,以在我的FlitterWPA中显示一些web内容。 它的父项状态为“已满”,并在更改\u frameUrl时重建此小部件。 但这只是第一次发生。之后,当父项更改时,我可以在日志中看到小部件正在重建并获得新的URL,但它仍然使用第一次给定的旧URL重新加载 import 'package:flutter/material.dart'; import 'dart:html'; import 'package:universal_ui/universal_ui.dart'

我已经创建了以下无状态小部件,以在我的FlitterWPA中显示一些web内容。 它的父项状态为“已满”,并在更改
\u frameUrl
时重建此小部件。 但这只是第一次发生。之后,当父项更改时,我可以在日志中看到小部件正在重建并获得新的URL,但它仍然使用第一次给定的旧URL重新加载

import 'package:flutter/material.dart';
import 'dart:html';
import 'package:universal_ui/universal_ui.dart';

class HtmlFrame extends StatelessWidget {
  var _iframeElement;
  final String _frameUrl;

  HtmlFrame(this._frameUrl);

  @override
  Widget build(BuildContext context) {
    print("Frame build: $_frameUrl");

    _iframeElement = IFrameElement();
    _iframeElement.height = '500';
    _iframeElement.width = '500';
    _iframeElement.src = _frameUrl;
    _iframeElement.style.border = 'none';
    _iframeElement.allowFullscreen = true;

    // ignore: undefined_prefixed_name
    ui.platformViewRegistry.registerViewFactory(
      'iframeElement',
      (int viewId) => (_iframeElement as IFrameElement),
    );

    return HtmlElementView(
      key: UniqueKey(),
      viewType: 'iframeElement',
    );
  }
}
下面是日志的外观:

### First URL: https://www.google.com

Frame build: http://www.google.com
Refused to display 'https://www.google.com/' in a frame because it set 'X-Frame-Options' to 'sameorigin'.

### After giving it the second URL: https://www.bing.com

Frame build: https://www.bing.com/
Refused to display 'https://www.google.com/' in a frame because it set 'X-Frame-Options' to 'sameorigin'.

我在上面的日志示例中使用了google和bing来显示它如何再次尝试加载第一个URL,因为SameOrgin错误记录了它尝试加载的URL。在我的应用程序中没有这样的问题,url属于允许的网站。

只需在将src url注册到ui时提供动态名称即可。所以最好的方法和简单的方法就是在代码中把url作为注册名传递

ui.platformViewRegistry.registerViewFactory(
  _frameUrl,
  (int viewId) => (_iframeElement as IFrameElement),
);

return HtmlElementView(
  key: UniqueKey(),
  viewType: _frameUrl,
);
就这样