【发布时间】:2012-06-27 16:54:44
【问题描述】:
在 XP 上的 Chrome 和 Firefox 中调用我的 NPAPI 插件中的方法时出现 JavaScript 错误:Error calling method on NPObject。在 Windows 7 上使用相同的浏览器运行相同的代码是成功的。
我已经使用 NPAPI 构建了一个 Scriptable 插件,到目前为止,我可以调试到我的 Scriptable 对象的 Invoke 方法。但我不相信它完成后我有任何控制权。
有没有人有任何想法?这是否仅在 Windows XP 中存在?
bool MY_ScriptableObject::Invoke(NPObject* npobj,
NPIdentifier name,
const NPVariant* args,
uint32_t argCount,
NPVariant* result)
{
bool rc = true;
char* wptr = NULL;
rc = false;
wptr = NULL;
if (name == NPN_GetStringIdentifier("getVersion"))
{
wptr = (NPUTF8*)NPN_MemAlloc(strlen("version:1.0.1") + 1); //Should be freed by browser
if (wptr != NULL)
{
rc = true;
memset(wptr,
0x00,
strlen("version:1.0.1")+1);
memcpy(wptr,
"version:1.0.1",
strlen("version:1.0.1"));
STRINGZ_TO_NPVARIANT(wptr,
*result);
}
}
return (rc);
}
这是我正在执行的 HTML 函数:
function Version()
{
var plugin = document.getElementById("plugin");
if (plugin == undefined)
{
alert("plugin failed");
return;
}
var text = plugin.getVersion(); //Error happens at this line
alert(text);
}
【问题讨论】:
-
把你的代码格式化成相当不稳定的状态,好吗?
-
我不确定我的代码格式有什么问题?
-
仅供参考 hapyfishrmn,您不应该回滚有用的编辑。 @EitanT 向您展示了您的代码格式有什么问题并修复了它,以便其他人可以更轻松地阅读和理解您的代码。我不知道你为什么要这么做。
-
@jmort253 每个人在格式化方面都有自己的偏好,如果这里有一个要关注的,我会很乐意这样做(我看了但没有找到),但似乎他要去竭尽全力做出符合他理解的改变,但对事业没有任何帮助。我很乐意有人更改我的问题以提供帮助并使其对未来的人更加理解。
-
如果对@hapyfishrmn 有帮助,我认为他让阅读更容易。请记住,您自己的代码总是会更容易阅读,无论其格式如何。作为我们代码的单一作者,我们有一点偏见,不会扩展到我们代码的 N 个可能的读者。此外,Eitan 所做的更“符合标准”,这意味着更多的人可能能够比在这里拥有一些非预期的东西更快地同化。希望这可以帮助! :)
标签: c++ google-chrome firefox npapi browser-plugin