【问题标题】:Accessing DOM object model JavascriptCore访问 DOM 对象模型 JavascriptCore
【发布时间】:2015-06-06 05:43:52
【问题描述】:

我有一段代码需要在我的 Objective-C 代码中访问 DOM 对象模型。我正在尝试执行一个假设返回内容的函数

    NSString *functionScr = [NSString stringWithFormat: @"var fPreset=\"%@\";"
"var addFavorite = function() {"
"   if (fPreset != '') {"
"        var ft = window.document.createElement('div');"
"        ft.innerHTML =  decodeURIComponent(fPreset);"
"        var f = ft.innerHTML;"
"        var bub = encodeURIComponent(f.childNodes[1]);"
"        return bub;"
"       }"
"   }",encodedHTML];

[context evaluateScript:functionScr];
JSValue *retVAL = [context evaluateScript:@"addFavorite();"];

当它执行时我得到一个错误

ReferenceError:找不到变量:窗口

如何在 JavascriptCore 中访问窗口对象?

【问题讨论】:

    标签: objective-c dom javascriptcore


    【解决方案1】:

    这是不可能的:( DOM 和任何其他窗口属性在 JavascriptCore 中不可用。 是纯JS引擎

    【讨论】:

      【解决方案2】:

      这对我有用

      JSContext *context = [yourwebview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
      [context evaluateScript:yourfunctionScr];
      JSValue *retVAL = [context evaluateScript:@"addFavorite();"];
      

      【讨论】:

      • 如果yourwebviewUIWebView,这确实有效。请注意,以这种方式使用键值编码是脆弱的,因为UIWebView 的内部结构随时可能发生变化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 2010-11-05
      相关资源
      最近更新 更多