小编Glo*_*del的帖子

CefSharp在任何文档加载/处理之前注入Javascript

对于我正在处理的项目,我需要在任何网页文档处理开始之前注入javascript.这可以通过WebBrowser组件轻松实现,但我在使用CefSharp时遇到了困难.

这是问题的简化,网页需要"InjectedObject"才能运行.在文档的最顶部调用未注入的网页,或者在处理文档之前进行评估/执行将导致:

===== html示例输出失败=====

isObjectPresent?

=====

我需要在哪里显示网页:

===== html示例输出成功=====

isObjectPresent?

真正

=====

<html>
  <head>
    <script>
      isObjectPresent = typeof InjectedObject == "object";
    </script>
  </head>
  <body>
    <p>isObjectPresent?</p>
    <div id="result"></div>
    <script>
      document.getElementById("result").innerHTML = isObjectPresent;
    </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

查看所有可用的建议将表明我应该使用LoadingStateChanged()或FrameLoadEnd()来注入脚本,即:

public void OnFrameLoadEnd(object sender, FrameLoadEndEventArgs args) {
  if (args.Frame.IsMain) {
    args.Frame.ExecuteJavascriptAsync("window.InjectedObject = {};");
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,我尝试过的所有迭代,甚至使用FrameLoadStart,都导致在文档开始处理后出现插入的javascript.是否有任何真正的javascript注入示例确保它在文档处理开始之前发生.(确保避免竞争条件/时间问题).

作为我想模仿的WebBrowser组件行为的一个例子是:

private void uiWebBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
{
  var browser = (WebBrowser)sender;
  var document = browser.Document as HTMLDocument;
  var head = document.getElementsByTagName("head").Cast<HTMLHeadElement>().First();
  if (head != null)
  {
    var …
Run Code Online (Sandbox Code Playgroud)

javascript c# javascript-injection cefsharp

8
推荐指数
1
解决办法
5402
查看次数

Swift WKWebView 在 didFailProvisionalNavigation 上崩溃

我们遇到了间歇性崩溃(有时会在某些设备上发生),我们很难确定该崩溃,并且无法按需重现。这与 Swift 3 和 WKWebView 组件有关,特别是当尝试通过 switch 语句获取错误代码时,其回调协议崩溃。见下文:

func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {

  if let err = error as? URLError {

    switch(err.code) {  //  Exception occurs on this line
    case .cancelled:
      Hint(hide: true)

    case .cannotFindHost:
      Hint(hide: false, hint:.CannotFindHost)

    case .notConnectedToInternet:
      Hint(hide: false, hint: .NoInternet)

    case .resourceUnavailable:
      Hint(hide: false)

    case .timedOut:
      Hint(hide: false)

    default:
      Hint(hide: false)
      print("error code: " + String(describing: err.code) + "  does not fall under known failures")
    }
  }
}

func Hint(hide: …
Run Code Online (Sandbox Code Playgroud)

webkit exception switch-statement ios swift

6
推荐指数
1
解决办法
7199
查看次数

npm 包导出路径定义

我正在生成我的第一组 npm 包来支持 react-native 环境。我希望以这样一种方式配置包,即内容在本质上是有组织的,并且可以通过客户端上的导入语句轻松区分。

给定在我的 npm 包中定义的 4 个函数定义(包名称:super-cool-animals):

蛇.ts

export function Boa() {}
export function Anaconda() {}
Run Code Online (Sandbox Code Playgroud)

鸟.ts

export function Pigeon() {}
export function Hawk() {}
Run Code Online (Sandbox Code Playgroud)

我希望库的使用者能够安装库:

npm install --save super-cool-animals
Run Code Online (Sandbox Code Playgroud)

然后像这样导入它们:

npm install --save super-cool-animals
Run Code Online (Sandbox Code Playgroud)

我很难确定实现这一点的正确机制,我相信我已经在某些环境中看到了这种机制(即角)

我看到了一些建议,允许您使用index.ts文件将它们组合成单个变量:

蛇/ index.ts

import { Boa, Anaconda } from 'super-cool-animals/snakes'
import { Pigeon, Hawk } from 'super-cool-animals/birds'

Pigeon();  // direct access to the function!
Run Code Online (Sandbox Code Playgroud)

鸟类/索引.ts

export * from './snakes.ts'
Run Code Online (Sandbox Code Playgroud)

./index.ts

export * from './birds.ts
Run Code Online (Sandbox Code Playgroud)

但这有一个丑陋的最终结果,你现在必须引用容器来获取函数:

图书馆消费者:

import * as …
Run Code Online (Sandbox Code Playgroud)

import export package npm react-native

6
推荐指数
1
解决办法
1119
查看次数